"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como lidar efetivamente com grandes arquivos CSV no Python 2.7?

Como lidar efetivamente com grandes arquivos CSV no Python 2.7?

Postado em 2025-03-05
Navegar:787

How to Effectively Handle Large CSV Files in Python 2.7?

lendo arquivos grandes .csv em python

Problem: lendo massive .csv arquivos (até 1 milhão de linhas, 200 colunas) no python 2.7 Encontrons em memória. No entanto, esse método se torna impraticável para arquivos grandes, pois consome memória excessiva. Processar linhas conforme elas são produzidas:

Evite carregar o arquivo inteiro na memória. Em vez disso, processe as linhas como são geradas usando uma função do gerador. Com o Open (nome do arquivo, "RB") como CSVFile: DataReader = CSV.Reader (CSVFile) render a seguir (DataReader) # Reduzir a linha do cabeçalho para linha em DataReader: Se linha [3] == Critério: rendimento linha

2. Use as funções geradoras para filtragem:

filtrar dados enquanto itera o arquivo usando as funções do gerador. Essa abordagem permite a correspondência de várias linhas consecutivas que atendem a um critério específico. Com o Open (nome do arquivo, "RB") como CSVFile: DataReader = CSV.Reader (CSVFile) render a seguir (DataReader) # Reduzir a linha do cabeçalho rendimento de Takewhile ( lambda r: r [3] == critério, Dropwhile (Lambda R: R [3]! = Critério, DataReader))) return

3. Otimize o consumo de memória:

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
refactor getData () para usar uma função do gerador também, garantindo que apenas uma linha seja mantida na memória a qualquer momento.

DEF getData (nome do arquivo, critério): Para critério em critérios: para linha em getstuff (nome do arquivo, critério): Crie linhas

Dicas adicionais para Speed:

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

use csv.Reader com um parâmetro de tamanho de chunk: Leia os arquivos em pedaços menores para reduzir o pé de memória. em um banco de dados para processamento mais rápido e mais eficiente.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3