1
resposta

[Sugestão] Alternativa para renomear as chaves ao importar o csv

Pessoal,

Lendo a documentação da biblioteca "csv", achei uma outra maneira de renomear as chaves, logo após a importação do "arquivo.csv", que acredito ser mais simples.

A classe "csv.DictReader" contém um parâmetro chamado "fieldnames", que é uma sequência. Quando o fieldnames é omitido, os valores na primeira linha do "arquivo.csv" são usados como nome dos campos. Porém, podemos determinar os nomes das colunas ao preencher este parâmetro.

Dado o fato de que sabemos os nomes das colunas, basta informarmos os nomes que gostaríamos que fossem usados, no momento de montar o dicionário.

Exemplo:

spamreader = csv.DictReader(file_b, fieldnames = ('Nome do Produto', 'Categoria do Produto', 'Preço do Produto (R$)', 'Quantidade em Estoque', 'Filial', 'Data da Venda'), delimiter = ',')`

ou, outra forma de inserir o parâmetro após a construção do "csv.DictReader":

spamreader = csv.DictReader(file_b, delimiter = ',')
spamreader.fieldnames = 'Nome do Produto', 'Categoria do Produto', 'Preço do Produto (R$)', 'Quantidade em Estoque', 'Filial', 'Data da Venda'

Lembrando que existe um porém. Ao informar os fieldnames, a 1ª linha do "arquivo.csv" será inserida como item, em vez de ser utilizada como colunas. Para contornar isso, usei um IF dentro do FOR, antes de fazermos o append na lista.

Eis o código final:

dados_csv = []

with open(path_csv, 'r') as file_b:
    spamreader = csv.DictReader(file_b, fieldnames = ('Nome do Produto', 'Categoria do Produto', 'Preço do Produto (R$)', 'Quantidade em Estoque', 'Filial', 'Data da Venda'), delimiter = ',')
    #spamreader.fieldnames = 'Nome do Produto', 'Categoria do Produto', 'Preço do Produto (R$)', 'Quantidade em Estoque', 'Filial', 'Data da Venda'
    
    for row in spamreader:
        if row['Nome do Produto'] == 'Nome do Item':
            pass
        else:
            dados_csv.append(row)

É isso. Fica aí uma sugestão. :-)

1 resposta

Olá, Jaques, tudo bem?

Que legal essa maneira de renomear as classes utilizando o DictReader, sua sugestão é muito válida e útil, e com certeza ajudará outros estudantes que estejam enfrentando a mesma situação.

Ah e seu código final ficou muito bem estruturado e claro, e é um ótimo exemplo de como implementar essa solução. Obrigada pela contribuição, gostei muito.

Continue com essa dedicação que você vai longe!

Abraços e bons estudos!