Pythonの基礎勉強が終わった所で応用、実践を行なって行きたい。
以前、このブログで弾けた
どんなプログラム言語でも覚える時にの共通習得仕様:15項目を参考に、実装してみることにしよう。
今回は、ファイル操作を実行してみる。
簡単すぎてアクビするなよ!
読み書き対象のデータファイル
今回の対象となるデータファイルを用意しておきます。
事前にCSV形式でデータを入れておきます。
1,a,SHIKOKU,
2,b,EHIME,
3,c,KAGAWA,
4,d,KOUCHI,
5,e,TOKUSHIMA,
ファイルの読み込み
基本に忠実にファイルデータを読み込んでline毎にprint処理を行います。
#coding: UTF-8
f = open('data.txt', 'r')
for row in f:
print row
f.close()
実行
$ python read.py
## 結果
1,a,SHIKOKU,
2,b,EHIME,
3,c,KAGAWA,
4,d,KOUCHI,
5,e,TOKUSHIMA,
なんか、改行が多いですね。
これは、pythonのprint関数がわざわざ毎回改行を加えて表示してくれる、いらんことしい的な機能のためである。
そこで、下記のようにすることで改行は無くなるようです。
print row
↓↓↓↓↓↓
print row,
printの後ろに","(カンマ)をつけるだけなんですね。
どうやら次のprintとくっつけてくれる効果があるのかな?
とりあえずこれはそんなに悩まず一先ず完了とする。
python v3では・・・
さらにちなみに、上記の書き方はPython v2の書き方なんですが、v3の場合は下記のように書くといいらしいです。
print(row,end="")
lineの終了文字列を指定できるんですね。
他の言語にこの手の仕様はないな〜〜〜。
ファイル書き込み
logのrecord方式を再現するために、line追記型にします。
lineの改行コードは"\n"にするのが一般的かもね。
#coding: UTF-8
f = open('data2.txt', 'w')
f.write('1,a,kyushu')
f.write('2,b,fukuoka')
f.write('3.c.nagasaki')
f.close()
実行
1,a,kyushu2,b,fukuoka3.c.nagasaki
書き込み用データファイルは「data2.txt」と現在ないモノを指定してみると、存在しなければ自動でファイルを作ってくれるようです。
検討
このプログラムでの問題点は
1, 改行を追加しなければいけない
2, プログラムを実行する度にファイルがリセットされてしまい、追記になっていない
まずは、改行は、"f.write('1,a,kyushu\n')"とすることで問題ないだろう。
そして、2番目の追記問題だが、openコマンドの"w"オプションを追記モードの"a"にするだけで、追記モードでファイルを開く事になるらしい。
#coding: UTF-8
f = open('data2.txt', 'a')
f.write('1,a,kyushu\n')
f.write('2,b,fukuoka\n')
f.write('3.c.nagasaki\n')
f.close()
この修正版で行なった所、問題なく書き込み完了。
なんて簡単な言語なんだ・・・
だけど、phpのfile_get_contentのような、わざわざfileオープンしなくても読み書きできるともっと便利なのにな・・・
まあ、OSの仕組み上、オープン・クローズ処理は必須ということか・・・
0 件のコメント:
コメントを投稿