Estoy tratando de determinar la mejor manera de manejar la eliminación de líneas nuevas al leer archivos delimitados por líneas nuevas en Python.
Lo que se me ocurrió es el siguiente código, incluye código desechable para probar.
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
Respuestas:
fuente
Aquí hay un generador que hace lo que solicitó. En este caso, usar rstrip es suficiente y un poco más rápido que strip.
lines = (line.rstrip('\n') for line in open(filename))
Sin embargo, lo más probable es que también desee utilizar esto para deshacerse de los espacios en blanco finales.
lines = (line.rstrip() for line in open(filename))
fuente
¿Qué opinas de este enfoque?
with open(filename) as data: datalines = (line.rstrip('\r\n') for line in data) for line in datalines: ...do something awesome...
La expresión del generador evita cargar el archivo completo en la memoria y
with
asegura el cierre del archivofuente
for line in file('/tmp/foo'): print line.strip('\n')
fuente
Solo usa expresiones generadoras:
blahblah = (l.rstrip() for l in open(filename)) for x in blahblah: print x
También quiero aconsejarle que no lea el archivo completo en la memoria: recorrer los generadores es mucho más eficiente en grandes conjuntos de datos.
fuente
yo uso esto
def cleaned( aFile ): for line in aFile: yield line.strip()
Entonces puedo hacer cosas como esta.
lines = list( cleaned( open("file","r") ) )
O puedo extender la limpieza con funciones adicionales para, por ejemplo, dejar líneas en blanco u omitir líneas de comentarios o lo que sea.
fuente
Lo haría así:
f = open('test.txt') l = [l for l in f.readlines() if l.strip()] f.close() print l
fuente
... if l.strip() is not ''
, que es lo que necesito en mi caso.