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

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

Mary-Kate Olsen
풀어 주다: 2024-11-09 05:07:02
원래의
477명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿