¿Mejor método para leer archivos delimitados de nueva línea y descartar las nuevas líneas?

Estoy tratando de determinar la mejor manera de manejar la eliminación de nuevas líneas al leer en archivos delimitados de nueva línea en Python.

Lo que he encontrado es el siguiente código, incluye el 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?

 lines = open(filename).read().splitlines() 

Aquí hay un generador que hace lo que pediste. En este caso, usar rstrip es suficiente y ligeramente más rápido que la tira.

 lines = (line.rstrip('\n') for line in open(filename)) 

Sin embargo, lo más probable es que desees usar esto también para deshacerte de los espacios en blanco finales.

 lines = (line.rstrip() for line in open(filename)) 

¿Qué opinas sobre 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 asegura el cierre del archivo

 for line in file('/tmp/foo'): print line.strip('\n') 

Solo usa expresiones generadoras:

 blahblah = (l.rstrip() for l in open(filename)) for x in blahblah: print x 

También quiero advertirle que no lea todo el archivo en la memoria, ya que los bucles sobre los generadores son mucho más eficientes en grandes conjuntos de datos.

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 bien, puedo extender la limpieza con funciones adicionales para, por ejemplo, eliminar líneas en blanco u omitir líneas de comentarios 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