mieki256's diary



2019/04/27() [n年前の日記]

#1 [python] Pythonでバイナリファイルを扱う方法を調べてたり

Python でバイナリファイルを扱う方法について調べていたり。環境は Windows10 x64 + Python 2.7.15 32bit。

ファイルの読み込みは、以下でいいらしい。
    f = open(infile, "rb")
    buf = f.read()
    f.close()
バイナリが文字列として buf に入るようだなと…。

バイナリの中から、C言語の構造体っぽい形で値を取得するなら、struct というモジュールが使えるようで。

_7.3. struct --- 文字列データをパックされたバイナリデータとして解釈する ・ Python 2.7.16 ドキュメント

こういう感じだろうか。
import struct

buf = struct.pack("<BHL", 1, 2, 3)
print(repr(buf))

lst = struct.unpack("<BHL", buf)
for i, v in enumerate(lst):
    print("%d : 0x%x" % (i, v))

実行結果。
> python 01_struct.py
'\x01\x02\x00\x03\x00\x00\x00'
0 : 0x1
1 : 0x2
2 : 0x3

unsigned char や unsigned short を取り出すフォーマット文字列は分かったけど、文字列を取り出す指定がちょっとよく分からず。"s"を指定すればいいのだろうか…。

こんな感じかな。
import struct

buf = struct.pack('<B17s', 2, 'FILENAME')
print(repr(buf))

v, s = struct.unpack("<B17s", buf)
print(repr(v))
print(repr(s))

実行結果。
>python 02_struct_string.py
'\x02FILENAME\x00\x00\x00\x00\x00\x00\x00\x00\x00'
2
'FILENAME\x00\x00\x00\x00\x00\x00\x00\x00\x00'

こんな感じでいいのだろう。たぶん。

以上、1 日分です。

過去ログ表示

Prev - 2019/04 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project