Python 初心者ですが、csv モジュールに少しイライラしています。このままだと、ファイル パーサーを自分で書いた方が簡単だったでしょうが、Python 風にやりたいです...。
データを CSV ファイルに保存する小さな Python スクリプトを作成しました。
私のコードの一部を以下に示します。
import csv
wrtr = csv.writer(open('myfile.csv','wb'),delimiter=',', quotechar='"')
for row in rows:
wrtr.writerow([row.field1,row.field2,row.field3])
ファイル myfile.csv は正常に作成されましたが、まだ空です。ただし、Python プロセスによってまだ使用されているため、ロックされています。データはメモリ内のファイルに書き込まれているようですが、まだディスクにフラッシュされていません。
Python プロセスがファイルのロックを保持しているので、ロックを解除するのは私の責任だと思います。質問は次のとおりです。
- Pythonでディスクにフラッシュするにはどうすればいいですか
- csv.writer() メソッドで開かれたファイルを閉じるにはどうすればいいですか?
ベストアンサー1
使用
with open('myfile.csv','wb') as myfile:
wrtr = csv.writer(myfile, delimiter=',', quotechar='"')
for row in rows:
wrtr.writerow([row.field1,row.field2,row.field3])
myfile.flush() # whenever you want
または
myfile = open('myfile.csv','wb')
wrtr = csv.writer(myfile, delimiter=',', quotechar='"')
for row in rows:
wrtr.writerow([row.field1,row.field2,row.field3])
myfile.flush() # whenever you want, and/or
myfile.close() # when you're done.
最初のアプローチの良い点は、例外が発生した場合でもファイルが自動的に適切に閉じられることです。
ファイル オブジェクトを匿名にしたい場合は、プログラムが終了したときにのみ閉じられます。いつフラッシュされるかは OS によって異なるため、終了するまでフラッシュされない場合もあります。