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 rowrefactor 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.
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