2013-06-12 23 views
14

Tôi đang cố gắng phát triển một công cụ đọc tệp nhị phân, thực hiện một số thay đổi và lưu nó. Những gì tôi đang cố gắng làm là tạo một danh sách của mỗi dòng trong tệp, làm việc với nhiều dòng và sau đó tham gia lại danh sách.Tham gia danh sách byte với python

Đây là những gì tôi đã cố gắng:

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) 

và đưa cho tôi lỗi này:

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

có ý nghĩa bởi vì tôi đang làm việc với byte.

Có cách nào tôi có thể sử dụng chức năng tham gia o tương tự như tham gia byte không? Cảm ơn bạn.

+0

cho những gì nó có giá trị, bạn có thể làm 'alist = f.readlines()' hoặc 'alist = danh sách (f)' – mgilson

+0

Hãy thử: 'new_file = '\ x01'.join (aList)' – karthikr

+1

Có ý nghĩa khi nói về "dòng" trong một tệp nhị phân không? Thông thường, chúng tôi thêm dòng mới cho tính dễ đọc và không áp dụng cho các tệp nhị phân. Tôi tự hỏi nếu bạn muốn làm việc tốt hơn với các chuỗi có độ dài cố định, giống như 80 byte một lần. (Chỉ là một ý nghĩ.) – Rob

Trả lời

38

Thực hiện tham gia vào một chuỗi byte sử dụng b''.join():

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

Vì vậy, python nhận ra khi tôi đang làm việc với byte chỉ cần thêm một 'b' bên cạnh bất kỳ chuỗi nào. Điều đó thật tuyệt. Cảm ơn. – user2130898

2

Chỉ cần làm việc trên "dòng" của bạn và viết chúng ra ngay sau khi bạn kết thúc với chúng.

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

Tôi không nghĩ về giải pháp này, điều này dễ hơn tôi nhiều. Cảm ơn! – user2130898