Lightweight Language Lovers
Python コードサンプル(ファイルとディレクトリ)
ここでは仕事で良く使用されると思われるコード片をいくつかご紹介します。記述方法はあくまで一例です。
ファイルの読み込み
1 fR = file(r'C:\tmp.txt', 'r') 2 for r in fR: 3 print r 4 fR.close()
C:\tmp.txt の前についているrは'raw data'を表します。パス区切りがエスケープされないように指定しています。
ファイルの書き込み
1 fW = file(r'C:\tmp.txt', 'w') 2 fW.write('test\n') 3 fW.close()
パターンに一致するファイル名を取得
ある条件に一致するファイルを取得するには glob モジュールを使用します。 結果は複数の場合もありますので、リストで返ってきます。
1 import glob 2 fileLists = glob.glob('*.csv') 3 for c in fileLists: 4 print 'file:', c
- Python でこれを実現するにはどうすれば良いでしょうか? 具体的な例として、「年齢」という引数を受け取って、「年齢別件数」という名前の辞書を生成して返す場合を考えてみます。マニュアルを調べたり、インターネットを検索しても難解な解説ばかりで、インスタントな実現方法を見つけることが出来ませんでした。そこで代用となるやり方を考えて見ました。
- まず、変数の値を変数名として評価し、値を展開するには、evalを使うのが簡単だと思います。
1 var1 = 'var2' 2 var2 = 'Value of var2' 3 eval(var1) 4 'Value of var2'
- ただ、これだと代入文の左辺では使えません。多少乱暴ですが、
1 arg = 'nenrei' 2 exec('dict_' + arg + ' = {}') 3 print dict_nenrei 4 {}
- でも良く考えてみると本当に必要なのは、「ある名前に対応するオブジェクトを作成」することです。これは辞書そのものです。
1 counter = {} 2 arg = 'nenrei' 3 counter[arg] = {} 4 print counter['nenrei'] 5 {}
- 確かに一番最初の書き方は簡潔で洗練されているように感じます。しかし、簡潔な分、$が一つ無くなっただけで全然意味が違ってきてバグの元ですし、「これは便利」と説明性を考えずに安易に使ってしまいがちです。後の書き方は稚拙なのかも知れませんが、とても「堅牢」な感じがしますし、真の要件が析出された感じがします。
この「堅牢である」という感覚、COBOL+メインフレームで育った人間特有の感覚かも知れません。(それとも私だけか・・・)命令文の書ける桁等も決まっていて、特にIF文では最後のピリオド1つで意味が大きく違ってしまうような言語を使っていると、すべて大文字で厳格なコーディング規約に従った図形的に整然としたソースを見ると何故か安心するのです。英小文字や{}が多い最近のコードを「軟弱」と感じてしまうのです。
- 私達は、ある言語で使える機能が他の言語に無いと、その言語は劣っていると感じてしまいがちですが、大切なのは、「可変変数がある」ことではなく、「実現したいことが出来る」ことです。
- 私は今回の例を通じて、言語のデザインとして、「何が出来ないか」も、とても大切な要素だと感じました。次世代Python (Python 3000)の計画では、組み込み関数から除外される関数もあるそうです。Pythonは使っていて、あっと驚くことが無く、感覚として「理にかなっている」と感じることが多いのは、こんな風に慎重にデザインされていることに理由があるのかも知れません。