>  기사  >  백엔드 개발  >  Python에서 대용량 CSV 파일을 읽을 때 메모리 문제를 처리하는 방법은 무엇입니까?

Python에서 대용량 CSV 파일을 읽을 때 메모리 문제를 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-09 05:07:02399검색

How to Handle Memory Issues When Reading Large CSV Files in Python?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.