>백엔드 개발 >파이썬 튜토리얼 >Python 2.7에서 대용량 CSV 파일을 효과적으로 처리하는 방법은 무엇입니까?

Python 2.7에서 대용량 CSV 파일을 효과적으로 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-08 03:32:02659검색

How to Effectively Handle Large CSV Files in Python 2.7?

Python에서 대용량 .csv 파일 읽기

문제: 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

속도를 위한 추가 팁:

  • 청크 크기 매개변수와 함께 csv.reader 사용: 파일을 더 작은 청크로 읽어 메모리 사용량을 줄입니다.
  • 데이터베이스 엔진 사용을 고려하세요. 데이터가 적합하다면 더 빠르고 효율적인 처리를 위해 데이터베이스에 저장하세요.

위 내용은 Python 2.7에서 대용량 CSV 파일을 효과적으로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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