2017-03-12 5 views
-1

私は、行ごとに1組の数字を含むasciiファイルをストレートバイナリ表現に変換するPythonスクリプトを書いていました。ここに私のスクリプトは次のとおりです。Pythonはバイナリデータでlfにcrを追加しますか?

in_file = open("p02_0609.bin", 'r') 
out_file = open("sta013.bin", 'w') 
out_data = bytearray() 

for line in in_file: 
    addr, i2c_data = [int(x) for x in line.split(" ")] 
    out_data.append(addr) 
    out_data.append(i2c_data) 

out_file.write(out_data) 
out_file.close() 
in_file.close() 

と、出力ファイルは、それがすべて以来いけない奇数バイト、上終了し、それは読んでいるファイルのサンプル(約2000行が合計)

58 1 
42 4 
40 0 
41 0 
32 0 
33 0 
34 0 
35 0 
36 0 
37 0 
38 0 
39 0 
40 1 
40 2 
33 143 
40 3 
33 0 
40 4 
40 5 
40 6 
40 7 
40 8 
40 9 
40 10 
40 11 

データはペアであり、予想よりも約80バイト長くなります。 16進エディタで掘り起こした後、ついに犯人を見つけました。 「10」(Ascii LF)のすべてのインスタンスには、その前にCRが追加されています。それをやめさせるにはどうすればいいですか?

Tl; dr:Pythonはバイナリデータの中でLFにCRを追加していますが、意味がありません。直し方?

+3

あなたはテキストモードでファイルを開いた方です...バイナリモードを使用するには、出力ファイルに '' 'wb'''を使います。 – jasonharper

答えて

0

テキストファイルで作業しているため、行末は自動的に関数openによって追加されます。バイトを読み書きするには、モード 'wb'を開いた状態で使用する必要があります。

+0

ああ、私はバイナリモードについて知らなかった。親切に、それを修正していただきありがとうございます。 –

関連する問題