Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro KeyError

Ola, fiz o código da pasta sript até o salvamento dos dados, seguindo as video aulas, segue o meu código:

import json
import csv
path_json='data_raw/dados_empresaA.json'
path_csv= 'data_raw/dados_empresaB.csv'

def leitura_json(path_json):
    dados_json=[]
    with open(path_json, 'r') as file:
        dados_json= json.load(file)
        return dados_json
    
def leitura_csv(path_csv):
    dados_csv=[]
    with open(path_csv, 'r') as file:
        spamreader= csv.DictReader(file, delimiter=',')
        for row in spamreader:
            dados_csv.append(row)
        return dados_csv
    
def leitura_dados(path, tipo_arquivo):
    dados=[]
    if tipo_arquivo=='json':
        dados=leitura_json(path)
    elif tipo_arquivo=='csv':
        dados=leitura_csv(path)
    return dados

def get_columns(dados):
    return list(dados[-1].keys())

def rename_columns(dados, key_mapping):
    new_dados_csv = []
    
    for old_dict in dados:
            dict_temp = {}
            for old_key, value in old_dict.items():
                dict_temp[key_mapping[old_key]] = value
            new_dados_csv.append(dict_temp)
            
    return new_dados_csv

def size_data(dados):
    return len(dados)

def join(dadosA, dadosB):
    combined_list = []
    combined_list.extend(dadosA)
    combined_list.extend(dadosB)
    return combined_list

def transformando_dados_tabela(dados, nomes_colunas):
    
    dados_combinados_tabela = [nomes_colunas]

    for row in dados:
        linha = []
        for coluna in nomes_colunas:
            linha.append(row.get(coluna, 'Indisponivel'))
        dados_combinados_tabela.append(linha)
    
    return dados_combinados_tabela

def salvando_dados(dados, path):
    with open(path, 'w') as file:
        writer = csv.writer(file)
        writer.writerows(dados)

#Iniciando a leitura
dados_json=leitura_dados(path_json, 'json')
dados_csv=leitura_dados(path_csv,'csv')
nome_colunas_json=get_columns(dados_json)

tamanho_dados_csv=size_data(dados_csv)

key_mapping = {'Nome do Item': 'Nome do Produto',
               'Classificação do Produto': 'Categoria do Produto',
               'Valor em Reais (R$)': 'Preço do Produto (R$)',
               'Quantidade em Estoque': 'Quantidade em Estoque',
               'Nome da Loja': 'Filial',
               'Data da Venda': 'Data da Venda'}

dados_csv=rename_columns(dados_csv, key_mapping)
nome_colunas_csv=get_columns(dados_csv)
print(nome_colunas_csv)



dados_fusao=join(dados_csv,dados_json)
nome_colunas_fusao=get_columns(dados_fusao)
tamanho_dados_fusao=size_data(dados_fusao)


# Salvando dados

dados_fusao_tabela = transformando_dados_tabela(dados_fusao, nome_colunas_fusao)
path_dados_combinados = 'data_processed/dados_combinados.csv'

salvando_dados(dados_fusao_tabela, path_dados_combinados)

print(path_dados_combinados)

Porém hoje quando dei um play no terminal apareceu o seguinte erro Insira aqui a descrição dessa imagem para ajudar na acessibilidadeNão sei o que pode ser pois fiz da mesma forma que o instrutor

1 resposta
solução!

Olá, Victor, tudo bem?

O erro KeyError ocorre quando uma chave que você está tentando acessar em um dicionário não existe. No seu caso, a chave 'Classificação do Produto' não está presente no dicionário key_mapping.

Para resolver o problema, sugiro as seguintes melhorias:

  1. Notei que nesta aula o instrutor utilizou dados[0].keys(). Portanto, recomendo fazer a seguinte correção na função get_columns

    def get_columns(dados):
        return list(dados[0].keys())
    
  2. Antes de renomear as colunas, recomendo que verifique os nomes das colunas do CSV para garantir que todas as chaves do key_mapping estão presentes. Você pode executa o código abaixo:

    print(get_columns(dados_csv))
    

Por último, às vezes, problemas de codificação podem causar caracteres estranhos. Então você pode especificar a codificação, por exemplo, utf-8.

with open(path_csv, 'r', encoding='utf-8') as file:

Teste fazendo essa modificação e veja se o problema é solucionado.

Caso o problema persista, fico à disposição!

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado