1. ホーム
  2. python

[解決済み] Pythonで文字列のヌルバイトを見つけるには?

2022-02-10 04:05:11

質問

ファイルを読み込んだ後のデータのパースに問題があります。バイナリファイルを読み込んで、読み込んだファイルから属性のリストを作成する必要があるのですが、ファイル内のデータはすべてヌルバイトで終了しています。NULL バイトで終端する属性のすべてのインスタンスを見つけようとしています。

基本的には次のような文字列を取ります。

Health\x00experience\x00charactername\x00

を作成し、リストに格納します。

本当の問題は、ヌルバイトをそのままにしておくことです。ヌルバイトの各インスタンスを見つけ、その前にあるデータを保存できればいいのです。

解決方法は?

を使うことに集約されますが split('\x00') のような便利なラッパーがあってもいいかもしれません。

def readlines(f, bufsize):
    buf = ""
    data = True
    while data:
        data = f.read(bufsize)
        buf += data
        lines = buf.split('\x00')
        buf = lines.pop()
        for line in lines:
            yield line + '\x00'
    yield buf + '\x00'

とすると、次のようなことができます。

with open('myfile', 'rb') as f:
    mylist = [item for item in readlines(f, 524288)]

これには、テキストを分割する前にコンテンツ全体をメモリに読み込む必要がないという利点もあります。