Leitura e gravação eficiente de arquivos CSV em Go
Uma tarefa comum no processamento de dados é ler e gravar arquivos CSV com bom desempenho. O trecho de código fornecido na pergunta demonstra um método lento para ler um arquivo CSV, processar os dados e gravá-los novamente. Uma ineficiência potencial reside na abordagem de carregar o arquivo inteiro na memória antes do processamento.
Para otimizar o código, é recomendado ler o arquivo de forma incremental chamando .Read() e processar uma linha por vez. Isso evita que o arquivo inteiro seja carregado na memória, o que pode melhorar significativamente o desempenho, especialmente para arquivos grandes.
Aqui está uma abordagem alternativa:
func processCSV(rc io.Reader) (ch chan []string) {
ch = make(chan []string, 10)
go func() {
r := csv.NewReader(rc)
if _, err := r.Read(); err != nil { //read header
log.Fatal(err)
}
defer close(ch)
for {
rec, err := r.Read()
if err != nil {
if err == io.EOF {
break
}
log.Fatal(err)
}
ch Esta abordagem usa um canal para passar registros da goroutine do leitor para a goroutine principal para processamento, permitindo uma abordagem de processamento incremental mais eficiente.
Ao adotar esta técnica, que envolve leitura e processando dados de forma incremental, você pode melhorar significativamente o desempenho de leitura e gravação de código CSV.
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