El mejor método para la lectura de archivos de nueva línea delimitada y descartando los saltos de línea?
Pregunta
Estoy tratando de determinar la mejor manera de manejar la eliminación de saltos de línea cuando se lee en la nueva línea delimitada archivos en Python.
Lo que yo he llegado con el siguiente código es, incluir el código de usar y tirar para poner a prueba.
import os
def getfile(filename,results):
f = open(filename)
filecontents = f.readlines()
for line in filecontents:
foo = line.strip('\n')
results.append(foo)
return results
blahblah = []
getfile('/tmp/foo',blahblah)
for x in blahblah:
print x
Sugerencias?
Solución
lines = open(filename).read().splitlines()
Otros consejos
Esto es un generador que hace lo que solicitó. En este caso, usando rstrip es suficiente y ligeramente más rápido que tira.
lines = (line.rstrip('\n') for line in open(filename))
Sin embargo, lo más probable es que desea utilizar este para deshacerse de arrastre espacios en blanco también.
lines = (line.rstrip() for line in open(filename))
¿Qué opinas acerca de este enfoque?
with open(filename) as data:
datalines = (line.rstrip('\r\n') for line in data)
for line in datalines:
...do something awesome...
expresión generadora evita cargar todo el archivo en la memoria y with
asegura de cerrar el archivo
for line in file('/tmp/foo'):
print line.strip('\n')
Sólo tiene que utilizar las expresiones generadoras:
blahblah = (l.rstrip() for l in open(filename))
for x in blahblah:
print x
También quiero aconsejarle en contra de leer todo el archivo en la memoria - bucle sobre los generadores es mucho más eficiente en grandes conjuntos de datos
.Yo uso este
def cleaned( aFile ):
for line in aFile:
yield line.strip()
A continuación, puedo hacer cosas como esta.
lines = list( cleaned( open("file","r") ) )
O, que puede extenderse limpiado con funciones adicionales para, por ejemplo, la caída de líneas en blanco o Omitir líneas de comentario o lo que sea.
lo haría así:
f = open('test.txt')
l = [l for l in f.readlines() if l.strip()]
f.close()
print l