큰 파일을 한 줄씩 읽어야합니다. 파일에 5GB 이상이 있고 각 줄을 읽어야한다고 말하지만 분명히 readlines()
메모리에 매우 큰 목록을 생성 하기 때문에 사용하고 싶지 않습니다 .
이 경우 아래 코드가 어떻게 작동합니까? 되어 xreadlines
자체 메모리에 하나 하나 읽어? 생성기 표현식이 필요합니까?
f = (line for line in open("log.txt").xreadlines()) # how much is loaded in memory?
f.next()
또한 Linux tail
명령 과 마찬가지로 이것을 역순으로 읽으려면 어떻게해야 합니까?
나는 찾았다 :
http://code.google.com/p/pytailer/
과
” 파이썬 헤드, 테일 및 텍스트 파일의 행으로 뒤로 읽음 “
둘 다 잘 작동했습니다!
답변
Keith는 간결하면서 파일을 명시 적으로 닫지 않기 때문에이 답변을 제공했습니다.
with open("log.txt") as infile:
for line in infile:
do_something_with(line)
답변
파일 객체를 반복자로 사용하기 만하면됩니다.
for line in open("log.txt"):
do_something_with(line)
최신 Python 버전에서 컨텍스트 관리자를 사용하는 것이 더 좋습니다.
with open("log.txt") as fileobject:
for line in fileobject:
do_something_with(line)
파일도 자동으로 닫힙니다.
답변
구식 접근 방식 :
fh = open(file_name, 'rt')
line = fh.readline()
while line:
# do stuff with line
line = fh.readline()
fh.close()
답변
대신 이터레이터를 사용하는 것이 좋습니다. 관련 : http://docs.python.org/library/fileinput.html
문서에서 :
import fileinput
for line in fileinput.input("filename"):
process(line)
이렇게하면 전체 파일을 한 번에 메모리에 복사하지 않아도됩니다.
답변
파일에 줄 바꿈이없는 경우 수행 할 작업은 다음과 같습니다.
with open('large_text.txt') as f:
while True:
c = f.read(1024)
if not c:
break
print(c)
답변
이것을 시도하십시오 :
with open('filename','r',buffering=100000) as f:
for line in f:
print line
답변
@ john-la-rooy의 대답처럼 쉽게 보일 수 있다고 생각할 수 없었습니다. 그래서 cp
한 줄씩 읽고 쓰는 명령을 다시 작성했습니다. CRAZY FAST입니다.
#!/usr/bin/env python3.6
import sys
with open(sys.argv[2], 'w') as outfile:
with open(sys.argv[1]) as infile:
for line in infile:
outfile.write(line)