Python에서 방대한 CSV 파일 읽기
Python 2.7에서는 수백만 개의 행과 수백 개의 행이 포함된 CSV 파일을 읽을 때 메모리 문제가 자주 발생합니다. 열. 이 문서에서는 이러한 과제를 해결하고 대용량 CSV 파일을 효과적으로 처리하기 위한 솔루션을 제공합니다.
원본 코드 및 문제
제공된 코드는 CSV 파일 기반의 특정 행을 읽는 것을 목표로 합니다. 주어진 기준에 따라. 그러나 처리하기 전에 모든 행을 목록에 로드하므로 300,000행을 초과하는 파일의 경우 메모리 오류가 발생합니다.
해결책 1: 행을 증분식으로 처리
메모리 문제가 있는 경우 행을 목록에 저장하는 대신 증분식으로 처리하는 것이 중요합니다. 이를 달성하기 위해 생성기 함수를 사용할 수 있습니다.
def getstuff(filename, criterion): with open(filename, "rb") as csvfile: datareader = csv.reader(csvfile) yield next(datareader) # yield the header row for row in datareader: if row[3] == criterion: yield row
이 함수는 기준과 일치하는 헤더 행과 후속 행을 생성한 다음 읽기를 중지합니다.
해결책 2: 최적화 필터링
또는 보다 간결한 필터링 방법을 사용할 수도 있습니다. 채용됨:
def getstuff(filename, criterion): with open(filename, "rb") as csvfile: datareader = csv.reader(csvfile) yield next(datareader) # yield the header row yield from takewhile( lambda r: r[3] == criterion, dropwhile(lambda r: r[3] != criterion, datareader))
이 방법은 itertools 모듈의 takewhile 및 dropwhile 함수를 사용하여 행을 필터링합니다.
업데이트된 코드
getdata 함수, 목록 이해가 생성기로 대체됩니다. 이해:
def getdata(filename, criteria): for criterion in criteria: for row in getstuff(filename, criterion): yield row
결론
생성기 기능을 사용하고 필터링 기술을 최적화하면 대용량 CSV 파일을 효과적으로 처리하여 메모리 오류를 방지하고 성능을 크게 향상시킬 수 있습니다. .
위 내용은 Python에서 대용량 CSV 파일을 읽을 때 메모리 문제를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!