2013-06-12 8 views
14

私は、バイナリファイルを読み、変更して保存するツールを開発しようとしています。私がやろうとしているのは、ファイル内の各行のリストを作成し、いくつかの行を使って作業し、リストに再び参加することです。Pythonでバイトリストに結合

これは私が試したものです:

file = open('myFile.exe', 'r+b') 

aList = [] 
for line in f: 
    aList.append(line) 

#Here im going to mutate some lines. 

new_file = ''.join(aList) 

と私は、このエラーを与える:私はバイトで働いているので、

TypeError: sequence item 0: expected str instance, bytes found 

理にかなっています。

私は結合関数を使用する方法はありますか?何かバイトを結合するのと同じですか? ありがとうございます。

+0

何が価値があるのは、あなたができる 'aListの= f.readlines()'や 'aListの=リストについては、(F)' – mgilson

+0

'new_file = '\ x01'.join(aList)' – karthikr

+1

バイナリファイルの "lines"について話すのは理にかなっていますか?通常、読みやすくするために改行を追加しますが、これはバイナリファイルには当てはまりません。 80バイトごとに固定長の文字列を扱うほうが良いかどうかは疑問です。 (ちょっと考えました。) – Rob

答えて

38

b''.join()を使用して、バイト文字列に結合を実行:

>>> b''.join([b'line 1\n', b'line 2\n']) 
b'line 1\nline 2\n' 
+0

したがって、Pythonはバイトで作業しているときに、文字列の隣に 'b'を追加するだけで認識します。これは素晴らしい。ありがとう。 – user2130898

2

あなたの "行"を作業し、終了したらすぐに書き出してください。

file = open('myFile.exe', 'r+b') 
outfile = open('myOutfile.exe', 'wb') 

for line in f: 
    #Here you are going to mutate the CURRENT line. 
    outfile.write(line) 
file.close() 
outfile.close() 
+0

私はこの解決策については考えていませんでしたが、これは私よりはるかに簡単です。ありがとう! – user2130898

関連する問題