문제: Python에서 대용량 .csv 파일(최대 100만 행, 200열) 읽기 2.7에서 메모리 오류가 발생했습니다.
초기 접근 방식은 전체 파일을 반복하고 데이터를 메모리에 목록으로 저장합니다. 그러나 이 방법은 메모리를 과도하게 소모하므로 대용량 파일에는 실용적이지 않습니다.
해결책:
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)) return
3. 메모리 소비 최적화:
getdata()를 리팩토링하여 생성기 함수도 사용하여 언제든지 하나의 행만 메모리에 유지되도록 합니다.
def getdata(filename, criteria): for criterion in criteria: for row in getstuff(filename, criterion): yield row
속도를 위한 추가 팁:
위 내용은 Python 2.7에서 대용량 CSV 파일을 효과적으로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!