2009-11-23 6 views
18

En Python, se puede leer un archivo y cargar sus líneas en una lista utilizandoConvert r texto a n por lo readlines() funciona según lo previsto

f = open('file.txt','r') 
lines = f.readlines() 

Cada línea individual está delimitada por \n pero si el contenido de una línea tiene \r y luego no se trata como una nueva línea. Necesito convertir todos \r a \n y obtener la lista correcta lines.

Si hago .split('\r') dentro de lines obtendré listas dentro de la lista.

Pensé en abrir un archivo, reemplazar todos \r a \n, cerrar el archivo y leerlo de nuevo y luego usar el readlines(), pero esto parece un desperdicio.

¿Cómo debo implementar esto?

+0

En realidad, si usted tiene una mezcla de '\ n 'y' saltos de línea \ R', y si estos últimos tienen lugar dentro de las líneas "reales" separadas por '\ n', y luego obtener listas dentro de la lista me parece que es lo correcto. –

Respuesta

44
f = open('file.txt','rU') 

Esto abre el archivo de Python con universal newline support y \r es tratado como un fin de línea.

+3

... aunque esta característica está en desuso y no debe usarse en código nuevo según la documentación de Python. –

+0

¡Gracias! Esto funciona según lo previsto y es suficiente para mí. Tim, ¿cuál sería la forma correcta de hacerlo ahora? – greye

+3

En Python 3.x la compatibilidad con la nueva línea universal está activada por defecto, por lo que no tiene que hacer nada. –

3

Si se trata de una preocupación, abierta en formato binario y convertir con este código:

from __future__ import with_statement 

with open(filename, "rb") as f: 
    s = f.read().replace('\r\n', '\n').replace('\r', '\n') 
    lines = s.split('\n') 
Cuestiones relacionadas