Nekoya Press

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文で開いて、中で別途書き込みすれば好きな内容を書き込んだ上で自動削除も利用できる。

    nekoya.github.io