web-dev-qa-db-ja.com

Pythonバイトの文字列をファイルに書き込む

Pythonを使用して、バイトモードでバイト文字列をファイルに書き込むにはどうすればよいですか?

私が持っています:

['0x28', '0x0', '0x0', '0x0']

0x28、0x0、0x0、0x0をファイルに書き込むにはどうすればよいですか?この文字列を有効なバイトに変換して書き込む方法がわかりません。

16
user2483347

bytearray()またはbytes()オブジェクトにマップし、それをファイルに書き込みます。

_with open(outputfilename, 'wb') as output:
    output.write(bytearray(int(i, 16) for i in yoursequence))
_

別のオプションは、 binascii.unhexlify() function を使用して、16進文字列をbytes値に変換することです。

_from binascii import unhexlify

with open(outputfilename, 'wb') as output:
    output.write(unhexlify(''.join(format(i[2:], '>02s') for i in b)))
_

ここでは、最初に_0x_部分を切り取ってから、値を再フォーマットしてゼロで埋め、全体を1つの文字列に結合する必要があります。

18
Martijn Pieters

Python 3.X、bytes()では、整数シーケンスをバイトシーケンスに変換します。

_>>> bytes([1,65,2,255])
b'\x01A\x02\xff'
_

ジェネレータ式を使用して、シーケンスを整数に変換できます(int(x,0)は、接頭辞に従って文字列を整数に変換します。_0x_は16進を選択します)。

_>>> list(int(x,0) for x in ['0x28','0x0','0x0','0x0'])
[40, 0, 0, 0]
_

それらを組み合わせる:

_>>> bytes(int(x,0) for x in ['0x28','0x0','0x0','0x0'])
b'(\x00\x00\x00'
_

そしてそれらを書きます:

_>>> L = ['0x28','0x0','0x0','0x0']
>>> with open('out.dat','wb') as f:
...  f.write(bytes(int(x,0) for x in L))
...
4
_
9
Mark Tolonen