画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

Pythonでバイナリを保存する時

最初は

        f = open('hogedata','w')
        for packet in packets:
            f.write(packet)
        f.close()

こう書いてた。Macだと上手くいくのだけど、Windowsで試して貰った時にダメだった。ダメだったというのは、Macで作った時と何故か違うファイルが出来ているっぽかった。ファイルサイズもそもそも違うし、出来たファイルを後工程で使うものに渡してもエラーで動かない。

あれなんでだろ。。?と思っていろいろ調べていくと、

https://docs.python.jp/2.7/library/functions.html?highlight=open#open

 バイナリとテキストファイルを区別するシステムでは、ファイルをバイナリモードで開くためには 'b' を追加してください; 区別しないシステムでは 'b' は無視されます。

あと、毎回新しくファイルを作り直したかったので、w+にした

        f = open('hogedata','w+b')
        for packet in packets:
            f.write(packet)
        f.close()

バイナリをなんかする時はちゃんとバイナリモードでファイルを開きましょう。

それにしても、Mac上でもうまくいかないでほしい。。けど、Wndowsとなにかしら違うからそういうもんなのかな?(雑)