2017-07-21 Fri 05:10
逆引きPython
INDEX
ファイル操作
bzip2で圧縮されたファイルの処理
Python2.7からはwith構文で処理できるようになったので、ふつうに書ける。
with bz2.BZ2File('hoge.pl.bz2') as f: for line in f: yield line
コマンドライン引数でファイルを処理する
標準モジュールのfileinputが便利。
ファイルを複数指定しても処理してくれるし、引数がなければ標準入力を受けてくれる。
openhookにhook_compressedを指定しておけばgzipやbzip2で圧縮したデータもよしなにやってくれる。
import fileinput for line in fileinput.input(openhook=fileinput.hook_compressed): yield line
テンポラリファイルを扱う
ファイルシステム上で認識可能なテンポラリファイルを作る場合は、tempfile.NamedTemporaryFileを使う。
これで作ったファイルは確かにopenできるが、ファイルに何か書き込もうとするともう一工夫が必要になる。
write()しただけではその書き込み内容が反映されず、close()するとファイルが消えてしまう。delete=Falseで作れば自主的に消さない限り消えないが、今度は消しそこねのリスクが発生する。
>>> import tempfile >>> import os.path >>> with tempfile.NamedTemporaryFile() as f: ... _f = open(f.name, 'w') ... _f.write('abcde') ... _f.close() ... os.path.getsize(f.name) ... 5
with文で開いて、中で別途書き込みすれば好きな内容を書き込んだ上で自動削除も利用できる。