Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Meu Script não roda no VScode

Olá, Ao rodar o script vem dando estes erros:

/home/nortonacosta/EngDados/Documentos/pipeline_dados/.venv/bin/python /home/nortonacosta/EngDados/Documentos/pipeline_dados/scripts/fusao_mercado_fev(.venv) nortonacosta@norton:~/EngDados/Documentos/pipeline_dados$ /home/nortonacosta/EngDados/Documentos/pipeline_dados/.venv/bin/python /home/nortonacosta/EngDados/Documentos/pipeline_dados/scripts/fusao_mercado_fev.py
Nome colunas dados json: ['Nome do Produto', 'Categoria do Produto', 'Preço do Produto (R$)', 'Quantidade em Estoque', 'Filial']
Traceback (most recent call last):
  File "/home/nortonacosta/EngDados/Documentos/pipeline_dados/scripts/fusao_mercado_fev.py", line 55, in <module>
    nome_colunas_csv = get_columns(dados_csv)
  File "/home/nortonacosta/EngDados/Documentos/pipeline_dados/scripts/fusao_mercado_fev.py", line 32, in get_columns
    return list(dados[0].keys())
AttributeError: 'list' object has no attribute 'keys'

ate venho tentando rodar direto pelo terminal(solução que estava dando certo). porém esta dando erros também após a transformação de dados csv.

4 respostas

Pode me mandar um print do código? Acho que sei o que está errado só preciso verificar o código.


import json
import csv

#/home/nortonacosta/EngDados/Documentos/pipeline_dados/.venv/bin/python /home/nortonacosta/EngDados/Documentos/pipeline_dados/scripts/fusao_mercado_fev.py


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.reader(file, delimiter=',')
        #spamreader é um nome padrao da varável de acordo com a documentação
        #O metodo reader do csv exige dois parametros(file e um demiliter) que separa os dados com (, ; ou |)
        for row in spamreader:
            dados_csv.append(row)
    return dados_csv        

def leitura_dados(path, tipo_arquivo):
    dados = []
    if tipo_arquivo == 'csv':
        dados = leitura_csv(path)
    elif tipo_arquivo == 'json':
        dados = leitura_json(path)
    return dados

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

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


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


#Etapa de Leitura dos dados
dados_json = leitura_dados(path_json, 'json')
nome_colunas_json = get_columns(dados_json)
print(f'Nome colunas dados json: {nome_colunas_json}')

dados_csv = leitura_dados(path_csv, 'csv')
nome_colunas_csv = get_columns(dados_csv)
print(nome_colunas_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'}

#Etapa de transformação dos dados
dados_csv = rename_columns(dados_csv, key_mapping)
nome_colunas_csv = get_columns(dados_csv)
print(nome_colunas_csv)
solução!

Tenta com esse script

import json
import csv

def leitura_json(caminho_json):
    with open(caminho_json, 'r') as arquivo:
        dados_json = json.load(arquivo)
    return dados_json

def leitura_csv(caminho_csv):
    with open(caminho_csv, 'r') as arquivo:
        leitor_csv = csv.DictReader(arquivo)
        dados_csv = list(leitor_csv)
    return dados_csv        

def leitura_dados(caminho, tipo_arquivo):
    if tipo_arquivo == 'csv':
        return leitura_csv(caminho)
    elif tipo_arquivo == 'json':
        return leitura_json(caminho)

def obter_colunas(dados):
    return list(dados[0].keys())

def renomear_colunas(dados, mapeamento_chaves):
    novos_dados = []
    for dicionario_antigo in dados:
        novo_dicionario = {}
        for chave_antiga, valor in dicionario_antigo.items():
            nova_chave = mapeamento_chaves.get(chave_antiga, chave_antiga)
            novo_dicionario[nova_chave] = valor
        novos_dados.append(novo_dicionario)
    return novos_dados

caminho_json = 'data_raw/dados_empresaA.json'
caminho_csv = 'data_raw/dados_empresaB.csv'

# Leitura dos dados
dados_json = leitura_dados(caminho_json, 'json')
colunas_json = obter_colunas(dados_json)
print(f'Colunas dos dados JSON: {colunas_json}')

dados_csv = leitura_dados(caminho_csv, 'csv')
colunas_csv = obter_colunas(dados_csv)
print(f'Colunas dos dados CSV: {colunas_csv}')

# Mapeamento de chaves e renomeação das colunas do CSV
mapeamento_chaves = {
    '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 = renomear_colunas(dados_csv, mapeamento_chaves)
colunas_csv_renomeadas = obter_colunas(dados_csv)
print(f'Colunas dos dados CSV renomeadas: {colunas_csv_renomeadas}')

Muito Obrigado meu amigo, me ajudou muito.