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 openlugar dein temp.newlineargumento 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
stripla nueva línea:O incluso, aunque bastante ilegible:
Lo que explota el hecho de que el valor de retorno de
orno es un valor booleano, sino el objeto que se evaluó como verdadero o falso.El
readlinesmé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 definf2.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):withcierra los archivos cuando finaliza el bloque, lo que significa que no puede hacerlowith open(...) as f: lines = (line for line in f)y usarloslinesfuerawithporque obtendrá un error de E / S. Puede ser flojo usando un genexp, pero debe consumirlo antes de cerrar el archivo.fuente
\r\nnuevas 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.lineseplo que funcionaría donde\nno. Perosplitlineses 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