반응형
질문
전체 파일의 각 줄을 반복하고 싶습니다. 이를 위해 전체 파일을 읽어 리스트에 저장한 다음 관심 있는 줄을 처리합니다. 이 방법은 많은 메모리를 사용하므로 다른 대안을 찾고 있습니다.
지금까지 작성한 코드:
for each_line in fileinput.input(input_file):
do_something(each_line)
for each_line_again in fileinput.input(input_file):
do_something(each_line_again)
이 코드를 실행하면 오류 메시지가 표시됩니다: device active
.
어떤 제안이 있나요?
목적은 각 줄에 대해 모든 다른 줄과 Levenshtein 거리를 계산하는 것입니다.
2022년 11월 수정: 이 질문보다 8개월 뒤에 질문된 관련 질문에는 많은 유용한 답변과 댓글이 있습니다. Python 논리에 대한 깊은 이해를 위해 이 관련 질문 How should I read a file line-by-line in Python?도 읽어보세요.
답변
파일을 읽는 올바르고 완전히 파이썬스러운 방법은 다음과 같습니다:
with open(...) as f:
for line in f:
# 'line'을 이용하여 작업 수행
with
문은 내부 블록에서 예외가 발생할 경우 파일을 열고 닫는 작업을 처리합니다. for line in f
는 파일 객체 f
를 반복 가능한 객체로 취급하여 버퍼링된 I/O와 메모리 관리를 자동으로 사용하므로 큰 파일에 대해 걱정할 필요가 없습니다.
하나 -- 그리고 가능하면 오직 하나 -- 명확한 방법이 있어야 합니다.
반응형
댓글