[python] 줄 바꿈으로 구분 된 파일을 읽고 줄 바꿈을 버리는 가장 좋은 방법은 무엇입니까?

파이썬에서 줄 바꿈으로 구분 된 파일을 읽을 때 줄 바꿈 제거를 처리하는 가장 좋은 방법을 결정하려고합니다.

내가 생각 해낸 것은 테스트 할 일회용 코드를 포함하는 다음 코드입니다.

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

제안?



답변

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


답변

요청한 것을 수행하는 생성기가 있습니다. 이 경우 rstrip을 사용하는 것이 충분하고 strip보다 약간 빠릅니다.

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

그러나 후행 공백도 제거하기 위해 이것을 사용하고 싶을 것입니다.

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


답변

이 접근 방식에 대해 어떻게 생각하십니까?

with open(filename) as data:
    datalines = (line.rstrip('\r\n') for line in data)
    for line in datalines:
        ...do something awesome...

생성기 표현식은 전체 파일을 메모리로로드하지 with않고 파일을 닫습니다.


답변

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


답변

생성기 표현식을 사용하십시오.

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

또한 메모리에서 전체 파일을 읽지 않도록 조언하고 싶습니다. 생성기를 반복하는 것이 큰 데이터 세트에서 훨씬 더 효율적입니다.


답변

나는 이것을 사용한다

def cleaned( aFile ):
    for line in aFile:
        yield line.strip()

그러면 이렇게 할 수 있습니다.

lines = list( cleaned( open("file","r") ) )

또는 추가 기능으로 clean을 확장하여 빈 줄을 삭제하거나 주석 줄을 건너 뛸 수 있습니다.


답변

다음과 같이 할 것입니다.

f = open('test.txt')
l = [l for l in f.readlines() if l.strip()]
f.close()
print l