Próbuję określić najlepszy sposób na pozbycie się znaków nowej linii podczas czytania w plikach rozdzielanych znakami nowej linii w Pythonie.
To, co wymyśliłem, to następujący kod, zawiera kod jednorazowy do przetestowania.
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
Propozycje?
Odpowiedzi:
źródło
Oto generator, który robi to, o co prosiłeś. W takim przypadku użycie rstrip jest wystarczające i nieco szybsze niż strip.
lines = (line.rstrip('\n') for line in open(filename))
Jednak najprawdopodobniej będziesz chciał użyć tego również do pozbycia się końcowych białych znaków.
lines = (line.rstrip() for line in open(filename))
źródło
Co myślisz o tym podejściu?
with open(filename) as data: datalines = (line.rstrip('\r\n') for line in data) for line in datalines: ...do something awesome...
Wyrażenie generatora pozwala uniknąć ładowania całego pliku do pamięci i
with
zapewnia zamknięcie plikuźródło
for line in file('/tmp/foo'): print line.strip('\n')
źródło
Po prostu użyj wyrażeń generatora:
blahblah = (l.rstrip() for l in open(filename)) for x in blahblah: print x
Chciałbym również odradzić wczytywanie całego pliku w pamięci - pętla nad generatorami jest znacznie wydajniejsza w przypadku dużych zbiorów danych.
źródło
używam tego
def cleaned( aFile ): for line in aFile: yield line.strip()
Wtedy mogę robić takie rzeczy.
lines = list( cleaned( open("file","r") ) )
Lub mogę rozszerzyć funkcję wyczyszczoną o dodatkowe funkcje, na przykład, aby upuścić puste wiersze lub pominąć wiersze komentarzy lub cokolwiek innego.
źródło
Zrobiłbym to tak:
f = open('test.txt') l = [l for l in f.readlines() if l.strip()] f.close() print l
źródło
... if l.strip() is not ''
, czego potrzebuję w moim przypadku.