Puede leer todo el archivo y dividir líneas usando str.splitlines
:
temp = file.read().splitlines()
O puede quitar la nueva línea a mano:
temp = [line[:-1] for line in file]
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:
with open(the_file, 'r+') as f:
f.seek(-1, 2) # go at the end of the file
if f.read(1) != '\n':
# add missing newline if not already present
f.write('\n')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
O una alternativa más simple es strip
la nueva línea:
[line.rstrip('\n') for line in file]
O incluso, aunque bastante ilegible:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
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:
def readlines(self):
lines = []
for line in iter(self.readline, ''):
lines.append(line)
return lines
# or equivalently
def readlines(self):
lines = []
while True:
line = self.readline()
if not line:
break
lines.append(line)
return lines
Como readline()
mantiene la nueva línea también la readlines()
mantiene.
Nota: para la simetría readlines()
del writelines()
método no se agregan nuevas líneas finales, por lo que f2.writelines(f.readlines())
produce una copia exacta de f
in f2
.
[l.strip('\n\r') for l in temp]
. O inclusorstrip
. Y desde la iteración aquí puede ser enin open
lugar dein temp
.