¿Cómo leer un archivo sin nuevas líneas?

Resuelto Yotam asked hace 12 años • 15 respuestas

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?

Yotam avatar Sep 08 '12 18:09 Yotam
Aceptado

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 stripla 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 orno es booleano, sino el objeto que se evaluó como verdadero o falso.


En realidad, el readlinesmé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 fin f2.

Bakuriu avatar Sep 08 '2012 11:09 Bakuriu
temp = open(filename,'r').read().split('\n')
vivek avatar Sep 08 '2012 11:09 vivek

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]).

O-9 avatar Sep 28 '2018 15:09 O-9

Creo que esta es la mejor opción.

temp = [line.strip() for line in file.readlines()]
RENZO avatar Feb 01 '2019 12:02 RENZO
temp = open(filename,'r').read().splitlines()
Marcel avatar Aug 17 '2017 02:08 Marcel