2012-03-01 6 views
9

Domanda newbie. In Python 2.7.2., Ho un problema nella lettura di file di testo che sembrano accidentalmente contenere alcuni caratteri di controllo. Specificamente, il cicloLinee di lettura oltre SUB in Python

for line in f

cesserà senza alcun avviso o errore non appena viene attraverso una linea con l'SUB carattere (ASCII hex codice 1a). Quando si utilizza f.readlines() il risultato è lo stesso. Essenzialmente, per quanto riguarda Python, il file è finito non appena viene incontrato il primo carattere SUB e l'ultimo valore assegnato a line è la linea fino a quel carattere.

C'è un modo per leggere oltre tale carattere e/o emettere un avviso quando si incontra uno? aprire il file in modalità binaria

risposta

8

Sui sistemi Windows 0x1a è il carattere di fine-file. Avrete bisogno di aprire il file in modalità binaria al fine di ottenere passato:

f = open(filename, 'rb') 

il lato negativo è si perde la natura line-oriented e devono dividere le linee di te stesso:

lines = f.read().split('\r\n') # assuming Windows line endings 
+1

per le terminazioni di linea linux, usare 'lines = f.read(). Split ('\ n')' –

6

Prova:

f = open(filename, 'rb') 
+3

grazie mille volte –