2012-02-01から1ヶ月間の記事一覧

0や空白の扱いを決めれるようにしてみた

先日から作成中のCSV→JSON変換プログラムですがCSVに空白が含まれている場合や、値が0の項目をどう扱うのかというオプションを付けてみました。今、以下のようなCSVファイルがあるとします。 ID, name, text, height, weight, sons, daughters 1, 夏子, どう…

イテレータをやっぱり分かってなかった話

先日から何度か書いていたコード(昨日も)に次のような記述をしていたのですが、基本中の基本の間違いをおかしていました(^_^;)下のように書いてたのですが def jsonwriter(tFileName, tDict, digitize=True): """write tDict to tFile as json if digitize=T…

昨日のエントリの補足+α

2013/2/23追記。 補足の補足になってしまいますがこの記事に関する訂正、補足記事を書きました→文字列がfloat型に変換可能かどうかを確認する正規表現について訂正と補足 - 主にプログラムを勉強するブログ 追記ここまで 昨日のエントリで、ある文字列がfloa…

isdigit()について

先日Pythonのisnan()はそもそも文字列を評価できないので文字列が数値に変換可能な形("10"とか"0.5"など)かどうかを判定できないということを書いたのですが、Pythonにはisdigit()という文字列が数字かどうかを判定する標準の関数がありました。 print "0".i…

関数化してみた

先日から作成しているcsvをjsonに変換するプログラムですが、これまでjson出力部分のみ関数で他はベタ書きだったのを機能ごとに関数に分割してみました。 # coding: shift_jis #CSVを読み込んでJSON化する import sys import codecs from collections import…

math.isnan()について

Python2.6以降にはmathモジュールにisnan()という関数が用意されているのですがこれはJavascriptのisNaNとはことなる働きをするものなのでちょっと嵌ってしまいました。JavascriptのisNaN()関数は何でも評価することができtrueかfalseが返されます window.al…

JSON出力部分を無理矢理書いてみた

昨日JSONライブラリを読んで改造しようかなと言ったばかりなのですが、私のスキルでは他人が書いたコードを読むのは自分で新たに書くより難度が高いと分かったので諦めて自作してみました。書き込む関数以外は省略しています。(全体はエントリの最後に) def …

ライブラリを読もうかな

私のPython処女作として作成したCSVをJSONに変換するプログラムなのですが、習作とはいえせっかく作るのだから実用できるものにしたいと思っています。修正したいポイントはいくつかあるのですがその中の一つが出力されるJSONファイルの中身の改行です。 現…

リストの内包表記

リストの内包表記はPythonの基本で避けて通れないものの一つのようです。 概念として新しいというよりはあくまで表記の問題なので無理矢理避けて通ろうかと思っていたんですが、コードを読む際にはどうしても必要なのでやはり避け切れませんでした。リストの…

PEP8に従うようにコードを整形してみた

以前書いたCSVをJSONに変換するプログラムをPEP8に従うように書きなおしてみました。昨日のエントリで書いた部分を一通り書きなおした後、その名もpep8という、コードが正しくPEP8に従っているかを確認してくれるツールを使って調べてみました。そうすると直…

PEP8というのがあるらしい

Pythonにはソースコードを読みやすくするためのコーディングスタイルを指南するPEP8というドキュメントがあるらしいです。私は超初心者なので自分のスタイルや書きやすい方法がまだありませんので今後は原則これに従うように書くことにします。 これまで書い…

lambda式

lambda式とは名前のない関数を返す式、Javascriptの無名関数のように使うことができるもの(似て非なるもの)、という感じでしょうか。というわけで無名関数を代入するやり方で関数定義してみる。 f = lambda x,y: x + y print f(3,4) #7 print f(5,8) #13 Jav…

クラスの超基礎4.継承

継承の概念をサポートしない言語機能はクラスと呼ぶに値しないとこちらのページでいわれているほど重要な要素である継承についてです。 継承を一言で言えばクラスを定義する時にメンバ変数とメソッドを他のクラスからコピーして、追加・変更のあるメンバのみ…

Google Chromeの仕様?

このブログでは本文に{font-family:monospace}を指定しているのですが、どうもGoogle chromeのみ表示が違っていたみたいです。 私自身がchromeばかり使用しているためこれまで気づいていなかったのですが、chromeはmonospaceを指定すると勝手に文字サイズが…

NaNの比較は要注意

先日JavascriptでlocalStorageから読み出した複数の情報を扱っていた時のことです。 localStorageにはキーと値の組み合わせで情報が保存されていますが、値はすべて文字列として保存されているため値の内数値のものだけを数値型に変換し、実際に文字列の物は…

クラスの超基礎3.イテレータ

イテレートとはいわゆるfor文によるループ処理のことです。このエントリは自作のクラスでfor文によるループ処理を可能にする方法について、です。まずイテレータの仕組みなのですがこちらに詳しく解説されています。 >>> s = 'abc' >>> it = iter(s) >>> it …

クラスの超基礎2.特別なメソッド

昨日のエントリでも既に使っていますが"__init__""のような"__"で挟まれた名前のメソッドは特別な意味を持っています。"__init__"はインスタンスが作成される時に自動的に実行され、インスタンスを初期化するメソッドです。 class Test: def __init__(self,x…

クラスの超基礎

私はこれまでJavascriptしか勉強したことがないのでクラスの勉強をするに当たって、「クラスとは?」というところから始めなければなりません。 といっても、Javascriptの勉強の際にも「クラスベースの言語では〜」と言った記述をあちらこちらで目にしてきた…

global文について

今までそういったケースがなかったので気づいていなかったのですが、Pythonは型を指定せずに変数をいきなり登場させられるという仕組み上、関数内からグローバル変数に代入を行うには明示的な指示が必要です。 a = 0 def f(): a = 5 #このaはローカル変数 pr…

引数デフォルト値がリストの関数がおもしろい

こちらのページで重要な警告としてかかれている引数のデフォルトがリストの関数についてです。 def f(a, L=[]): L.append(a) return L print f(1) print f(2) print f(3) http://www.python.jp/doc/2.4/tut/node6.html これの実行結果は [1] [1, 2] [1, 2, 3…