2013-06-12 16 views
14

Sto provando a sviluppare uno strumento che legge un file binario, apporta alcune modifiche e lo salva. Quello che sto cercando di fare è fare una lista di ogni riga nel file, lavorare con diverse linee e poi unirmi di nuovo alla lista.Unione di una lista di byte con python

Questo è quello che ho provato:

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) 

e mi danno questo errore:

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

che ha un senso perché sto lavorando con i byte.

C'è un modo per utilizzare la funzione join o qualcosa di simile per unire byte? Grazie.

+0

per quello che vale, si potrebbe fare 'aList = f.readlines()' o 'aList = lista (f)' – mgilson

+0

Prova: 'new_file = '\ x01'.join (a lista)' – karthikr

+1

Ha senso parlare di "linee" in un file binario? Solitamente aggiungiamo newline per la leggibilità e questo non si applica ai file binari. Mi chiedo se starai meglio lavorando con stringhe a lunghezza fissa, come ogni 80 byte. (Solo un pensiero.) – Rob

risposta

38

Eseguire il join su una stringa di byte utilizzando b''.join():

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

Quindi python riconosce quando sto lavorando con i byte aggiungendo semplicemente una "b" accanto a qualsiasi stringa. È grandioso Grazie. – user2130898

2

Basta lavorare sulle "linee" e scriverle non appena hai finito con loro.

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

Non ho pensato a questa soluzione, questo è molto più facile del mio. Grazie! – user2130898

Problemi correlati