Puedes leer las líneas de archivo y división usando str.splitlines
:
temp = file.read().splitlines()
O puede despojar a la nueva línea con la mano:
temp = [line[:-1] for line in file]
Nota: esta última solución sólo funciona si el 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 qué añadir una nueva línea que termina de todos modos).
Si desea evitar esto se 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 sencilla consiste en strip
la nueva línea en su lugar:
[line.rstrip('\n') for line in file]
O incluso, aunque bastante ilegible:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Que explota el hecho de que el retorno va lue de or
no es un booleano, sino el objeto que se evaluó como verdadero o falso.
El método readlines
es realmente 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
Desde readline()
mantiene el salto de línea también readlines()
lo mantiene.
Nota: de simetría para readlines()
el método writelines()
hace no añadir saltos de línea que termina, por lo f2.writelines(f.readlines())
produce una copia exacta de f
en f2
.
Uso tira: '[l.strip ('\ n \ r') para l en temp]'. O incluso 'rstrip'. Y desde la iteración aquí puede ser 'in open' en lugar de' in temp'. – gorlum0
Esta pregunta es responsable de cada puntaje de reputación que tengo – Yotam
Sería bueno si en Python 3 hubiera un valor para establecer el argumento 'newline' de open en las líneas nuevas tramadas. – jxramos