2012-03-01 24 views
9

Pregunta de novato. En Python 2.7.2., Tengo un problema al leer archivos de texto que accidentalmente parecen contener algunos caracteres de control. Específicamente, el bucleLeer líneas más allá de SUB en Python

for line in f

dejará sin ninguna advertencia o error tan pronto como se trata a través de una línea que contiene el SUB de caracteres (ASCII hex código 1a). Al usar f.readlines(), el resultado es el mismo. Esencialmente, en lo que respecta a Python, el archivo finaliza tan pronto como se encuentra el primer carácter SUB, y el último valor asignado line está alineado con ese carácter.

¿Hay alguna forma de leer más allá de ese carácter y/o emitir una advertencia al encontrar uno?

Respuesta

8

En los sistemas Windows 0x1a es el carácter de fin de archivo. Tendrá que abrir el archivo en modo binario con el fin de conseguir más allá de ella:

f = open(filename, 'rb') 

La desventaja es que se pierde la naturaleza orientada a la línea y tienen que dividir las líneas de sí mismo:

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

para terminaciones de línea de linux, use 'lines = f.read(). Split ('\ n')' –

6

intente abrir el archivo en modo binario:

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

gracias mil veces –

Cuestiones relacionadas