struct.unpackを使用して、すべてのC構造体フィールドとその値(整数と文字列)のダンプから作成されたバイナリファイルを読み込みます。アンパックされたタプルは、フィールドとその値の中間的な辞書表現を作成するために使用され、後でテキストファイル出力に書き込まれます。Python struct.unpack - バイナリ文字列リテラルをアスキーテキストファイルに変換する
テキストファイルの出力は以下のように文字列を表示します。
ID = b'000194901137\x00\x00\x00\x00'
timestampGMT = 1489215906
timezoneDiff = -5
timestampPackage = 1489215902
version = 293
type = b'FULL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
プログラムは、以前にそれが正常に動作するために使用のpython 2.6、中に書かれていました。テキストファイルへの書き込み中に私たちは、不要な進文字を削除するには、以下のラムダ式を使用していました:Pythonの3.5への移行
filtered_string = filter(lambda x: x in string.printable, line)
それが今のフィルタを返すために、ラムダ式は、もはやサポートされていません簡単に文字列に変換することはできません。
これらのバイナリ文字列リテラルを同等のASCII文字列(末尾のNUL '\ x00'なし)に変換するPythonの方法は何ですか。通常の文字列値として記述されます。
また、現在のコンテキストで可能な最良のソリューションを探すために、各ファイルに対して処理されるエントリが複数存在します(複数のファイルがあります)。
が、それはちょうどあなたが扱っているゼロ化される。これを読んで - 例えば: 'type.rstrip(B」だろう\ x00 ') '作業しているか、それとも印刷可能なチェックでなければなりません...後で' bytes'ではなく 'str'を望むかどうかは分かりませんので、'' '.join(ch.isprintable()ならtext.decode(' ascii ')のch) '私はそう思っています... –
その唯一のNULLです。文字列全体を印刷しようとしているので、末尾のNULLも出力します。 rstrip()を試しましたが、復帰文字も取り除きます。 – prohit99
もしあなたが上記のようにrstripに渡したいものを渡すなら、それはすべきです: 'type.rstrip(b '\ x00')' –