¿Cómo leer un archivo sin nuevas líneas?
En Python, llamar, por ejemplo, temp = open(filename,'r').readlines()
da como resultado una lista en la que cada elemento es una línea del archivo. Sin embargo, estas cadenas tienen un carácter de nueva línea al final, lo cual no quiero.
¿Cómo puedo obtener los datos sin las nuevas líneas?
Puede leer el archivo completo y dividir líneas usando str.splitlines
:
temp = file.read().splitlines()
O puedes 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.
Esta suposición es cierta en la mayoría de los casos (especialmente para archivos creados por editores de texto, que a menudo agregan una nueva línea final 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 aprovecha el hecho de que el valor de retorno de or
no es booleano, sino el objeto que se evaluó como verdadero o falso.
En realidad, el readlines
método es 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
Dado que readline()
mantiene la nueva línea, también readlines()
la mantiene.
Nota: para lograr simetría, readlines()
el writelines()
método no agrega nuevas líneas finales, por lo que f2.writelines(f.readlines())
produce una copia exacta de f
in f2
.
temp = open(filename,'r').read().split('\n')
Leyendo el archivo una fila a la vez. Eliminar caracteres no deseados del final de la cadena con str.rstrip(chars)
.
with open(filename, 'r') as fileobj:
for row in fileobj:
print(row.rstrip('\n'))
Véase también str.strip([chars])
y str.lstrip([chars])
.
Creo que esta es la mejor opción.
temp = [line.strip() for line in file.readlines()]
temp = open(filename,'r').read().splitlines()