En Python, llamando
temp = open(filename,'r').readlines()
da como resultado una lista en la que cada elemento es una línea en el archivo. Es un poco estúpido pero aún así: readlines()
también escribe caracteres de nueva línea en cada elemento, algo que no deseo que suceda.
¿Cómo puedo evitarlo?
python
line-breaks
readlines
Yotam
fuente
fuente
[l.strip('\n\r') for l in temp]
. O inclusorstrip
. Y desde la iteración aquí puede ser enin open
lugar dein temp
.newline
argumento de open en esas nuevas líneas finales.Respuestas:
Puede leer todo el archivo y dividir líneas usando
str.splitlines
:O puede quitar la nueva línea a mano:
Nota: esta última solución solo funciona si el archivo termina con una nueva línea; de lo contrario, la última línea perderá un carácter.
Este supuesto es cierto en la mayoría de los casos (especialmente para los archivos creados por los editores de texto, que a menudo hacen añadir una nueva línea que termina de todos modos).
Si desea evitar esto, puede agregar una nueva línea al final del archivo:
O una alternativa más simple es
strip
la nueva línea:O incluso, aunque bastante ilegible:
Lo que explota el hecho de que el valor de retorno de
or
no es un valor booleano, sino el objeto que se evaluó como verdadero o falso.El
readlines
método es en realidad equivalente a:Como
readline()
mantiene la nueva línea también lareadlines()
mantiene.Nota: para la simetría
readlines()
delwritelines()
método no se agregan nuevas líneas finales, por lo quef2.writelines(f.readlines())
produce una copia exacta def
inf2
.fuente
[line.rstrip('\n') for line in file]
eliminará más de un final\n
.[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
podría ser en su lugar[line[:-(line[-1] == '\n') or None] for line in file]
.for line in (x.strip() for x in f):
with
cierra los archivos cuando finaliza el bloque, lo que significa que no puede hacerlowith open(...) as f: lines = (line for line in f)
y usarloslines
fuerawith
porque obtendrá un error de E / S. Puede ser flojo usando un genexp, pero debe consumirlo antes de cerrar el archivo.fuente
\r\n
nuevas líneas? ;).split('\n')
lo tanto, se dividirá correctamente, independientemente de la convención de nueva línea. Importaría si lees el archivo en modo binario, en ese casosplitlines()
maneja nuevas líneas universales mientrassplit('\n')
que no lo hace.os.linesep
:)\r\n
, las terminaciones de línea no se convierten\n
, ya sea como texto o binario, poros.linesep
lo que funcionaría donde\n
no. Perosplitlines
es claramente la mejor opción, en el caso de que mencione dónde el archivo no coincide con el sistema operativo. Realmente lo mencioné principalmente en caso de que las personas que miraban esta discusión no supieran de su existencia.\r\n
, se convertirían para archivos de texto incluso cuando esté ejecutando en Linux.otro ejemplo:
Leyendo el archivo una fila a la vez. Eliminar caracteres no deseados con desde el final de la cadena
str.rstrip(chars)
ver también
str.strip([chars])
ystr.lstrip([chars])
(python> = 2.0)
fuente
fuente
Creo que esta es la mejor opción.
fuente
temp = [line.rstrip() for line in file.readlines()]
para obtener lo que se pretende con las notas de @Roland_Illig..readlines()
, estás iterando efectivamente sobre todo el archivo dos veces.Prueba esto:
fuente
fuente
.readlines()
esta manera, está iterando efectivamente sobre todo el archivo dos veces.fuente
fuente