Melhor método para leitura de arquivos de nova linha delimitada e descartando as novas linhas?
Pergunta
Eu estou tentando determinar a melhor maneira de lidar com se livrar de novas linhas ao ler na nova linha delimitados arquivos em Python.
O que eu vim acima com é o seguinte código, incluem descartável código para teste.
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
Sugestões?
Solução
lines = open(filename).read().splitlines()
Outras dicas
Aqui está um gerador que faz o que você pediu. Neste caso, utilizando RSTRIP é suficiente e ligeiramente mais rápido do que tira.
lines = (line.rstrip('\n') for line in open(filename))
No entanto, você provavelmente vai querer usar isso para se livrar de fuga espaços em branco também.
lines = (line.rstrip() for line in open(filename))
O que você acha sobre essa abordagem?
with open(filename) as data:
datalines = (line.rstrip('\r\n') for line in data)
for line in datalines:
...do something awesome...
Gerador evita expressão carregar o arquivo inteiro na memória e with
garante fechando o arquivo
for line in file('/tmp/foo'):
print line.strip('\n')
Apenas gerador de expressões uso:
blahblah = (l.rstrip() for l in open(filename))
for x in blahblah:
print x
Também quero aconselhá-lo contra a leitura arquivo inteiro na memória -. Looping sobre geradores é muito mais eficiente em grandes conjuntos de dados
Eu uso este
def cleaned( aFile ):
for line in aFile:
yield line.strip()
Então eu posso fazer coisas como esta.
lines = list( cleaned( open("file","r") ) )
Ou, posso estender limpo com funções extras para, por exemplo, deixar linhas em branco ou pular linhas de comentário ou o que quer.
Eu faria isso como este:
f = open('test.txt')
l = [l for l in f.readlines() if l.strip()]
f.close()
print l