Melhor método para leitura de arquivos de nova linha delimitada e descartando as novas linhas?

StackOverflow https://stackoverflow.com/questions/544921

  •  23-08-2019
  •  | 
  •  

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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top