>  기사  >  백엔드 개발  >  메모리 문제 없이 Python 2.7에서 대용량 CSV 파일을 효율적으로 처리하려면 어떻게 해야 합니까?

메모리 문제 없이 Python 2.7에서 대용량 CSV 파일을 효율적으로 처리하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-08 04:52:01921검색

How can I efficiently process gigantic CSV files in Python 2.7 without running into memory issues?

거대한 CSV 파일 읽기: 메모리 및 속도 최적화

수백만 개의 행과 수백 개의 열로 구성된 대용량 CSV 파일을 처리하려고 할 때 기존의 반복자를 사용하는 접근 방식은 메모리 관련 문제로 이어질 수 있습니다. 이 문서에서는 Python 2.7에서 대규모 CSV 데이터를 처리하기 위한 최적화된 기술을 살펴봅니다.

메모리 최적화:

메모리 문제의 핵심은 메모리 내 목록을 구성하는 데 있습니다. 대규모 데이터 세트를 저장합니다. 이 문제를 완화하기 위해 Python은 함수를 생성기 함수로 변환하는 항복 키워드를 제공합니다. 이러한 함수는 각 항복 문 후에 실행을 일시 중지하여 데이터가 발견될 때마다 증분 처리를 허용합니다.

생성기 기능을 사용하면 데이터를 행 단위로 처리할 수 있으므로 전체 파일을 메모리에 저장할 필요가 없습니다. 다음 코드는 이 접근 방식을 보여줍니다.

import csv

def getstuff(filename, criterion):
    with open(filename, "rb") as csvfile:
        datareader = csv.reader(csvfile)
        yield next(datareader)  # yield header row

        count = 0
        for row in datareader:
            if row[3] == criterion:
                yield row
                count += 1
            elif count:  # stop processing when a consecutive series of non-matching rows is encountered
                return

속도 향상:

또한 Python의 dropwhile 및 takewhile 기능을 활용하여 처리 속도를 더욱 향상시킬 수 있습니다. 이러한 기능을 사용하면 데이터를 효율적으로 필터링하여 관심 있는 행을 빠르게 찾을 수 있습니다. 방법은 다음과 같습니다.

from itertools import dropwhile, takewhile

def getstuff(filename, criterion):
    with open(filename, "rb") as csvfile:
        datareader = csv.reader(csvfile)
        yield next(datareader)  # yield header row

        yield from takewhile(  # yield matching rows
            lambda r: r[3] == criterion,
            dropwhile(  # skip non-matching rows
                lambda r: r[3] != criterion, datareader))
        return

간소화된 루프 처리:

생성기 기능을 결합하면 데이터세트의 루프 프로세스를 크게 단순화할 수 있습니다. getstuff 및 getdata에 최적화된 코드는 다음과 같습니다.

def getdata(filename, criteria):
    for criterion in criteria:
        for row in getstuff(filename, criterion):
            yield row

이제 한 행씩 스트림을 생성하는 getdata 생성기를 직접 반복하여 귀중한 메모리 리소스를 확보할 수 있습니다.

목표는 메모리 내 데이터 저장을 최소화하는 동시에 처리 효율성을 최대화하는 것임을 기억하세요. 이러한 최적화 기술을 적용하면 메모리 장애 없이 대용량 CSV 파일을 효과적으로 처리할 수 있습니다.

위 내용은 메모리 문제 없이 Python 2.7에서 대용량 CSV 파일을 효율적으로 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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