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

Quando abro o arquivo dentro do terminal aparece mais linhas do que deveria

Quando vou salvar os dados com o comando:

path_dados_combinados = './data_processed/dados.combinados.csv'
dados_fusao.salvando_dados(path_dados_combinados)
print(path_dados_combinados)

eu entro no arquivo e me deparo com 26 mil linhas, não sei identificar o erro, pois acho que está igual durante as aulas. Segue código do arquivo 'fusao_mercado_fev.py':

# Extract
dados_empresaA = Dados(path_json, 'json')
print(f"Coluna empresa A {dados_empresaA.nome_colunas}")
print(f"Qtd de Linhas: {dados_empresaA.qtd_linhas}")

dados_empresaB = Dados(path_csv, 'csv')
print(f"Coluna empresa B {dados_empresaB.nome_colunas}")
print(f"Qtd de Linhas: {dados_empresaB.qtd_linhas}")

# Transform 

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_empresaB.rename_collumns(key_mapping)
print(f"Coluna Atualizada {dados_empresaB.nome_colunas}")

dados_fusao = Dados.join(dados_empresaA, dados_empresaB)
print(f"Nome de Coluna Fusão: {dados_fusao.nome_colunas}")
print(f"Qtd linhas Fusão: {dados_fusao.qtd_linhas}")

# Load 

path_dados_combinados = './data_processed/dados.combinados.csv'
dados_fusao.salvando_dados(path_dados_combinados)
print(path_dados_combinados)

e agora o arquivo 'processamento_dados.py':

import json
import csv

class Dados: 
 
    def __init__(self, path, tipo_dados):
        self.path = path
        self.tipo_dados = tipo_dados
        self.dados = self.leitura_dados()
        self.nome_colunas = self.get_collumns()
        self.qtd_linhas = self.size_data()

    def leitura_json(self):
        dados_json = []
        with open(self.path, 'r') as file:
            dados_json = json.load(file)
        return dados_json 

    def leitura_csv(self):

        dados_csv =[]
        with open(self.path, 'r') as file:
            spamreader = csv.DictReader(file, delimiter=',')
            for row in spamreader:
                dados_csv.append(row)

        return dados_csv

    def leitura_dados(self):
        dados = []

        if self.tipo_dados == 'csv':
                dados = self.leitura_csv()
        elif self.tipo_dados == 'json':
                dados = self.leitura_json()
        elif self.tipo_dados == 'list':
             dados = self.path
             self.path = 'Lista em memoria'
            
        return dados
    
    def get_collumns(self): 
        return list(self.dados[-1].keys())
    
    def rename_collumns(self, key_mapping):
        new_dados = []

        for old_dict in self.dados: 
            dict_temp = {}
            for old_key, value in old_dict.items():
                dict_temp[key_mapping[old_key]] = value
            new_dados.append(dict_temp)
        
        self.dados =  new_dados
        self.nome_colunas = self.get_collumns()

    def size_data(self):
        return len(self.dados)
    
    def join(dadosA, dadosB):
        combined_list = []
        combined_list.extend(dadosA.dados)
        combined_list.extend(dadosB.dados)
        return Dados(combined_list, 'list')
    
    def transformando_dados_tabela(self):
        dados_combinados_tabela = [self.nome_colunas]

        for row in self.dados:
            linha = []
            for coluna in self.nome_colunas:
                linha.append(row.get(coluna, 'Indisponivel'))
                dados_combinados_tabela.append(linha)
        return dados_combinados_tabela
    
    def salvando_dados(self, path):

        dados_combinados_tabela = self.transformando_dados_tabela()

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

o terminal quando eu rodo está correto, so quando abro o caminho que coloquei como atalho dá errado quando entro Insira aqui a descrição dessa imagem para ajudar na acessibilidadefica desse jeito: Insira aqui a descrição dessa imagem para ajudar na acessibilidadeespero que possam me ajudar. Agradeço desde já!

1 resposta
solução!

Oii, Pedro! Como vai?

Observei um problema no seu código: a função transformando_dados_tabela() pode gerar linhas duplicadas devido à indentação incorreta. O erro ocorre porque dados_combinados_tabela.append(linha) está dentro do for das colunas, repetindo a mesma linha várias vezes.

Código original:

def transformando_dados_tabela(self):
    dados_combinados_tabela = [self.nome_colunas]

    for row in self.dados:
        linha = []
        for coluna in self.nome_colunas:
            linha.append(row.get(coluna, 'Indisponivel'))
            dados_combinados_tabela.append(linha)  # Cuidado com a indentação

    return dados_combinados_tabela

Código ajustado:

def transformando_dados_tabela(self):
    dados_combinados_tabela = [self.nome_colunas]
    for row in self.dados:
        linha = []
        for coluna in self.nome_colunas:
            linha.append(row.get(coluna, 'Indisponivel'))
        dados_combinados_tabela.append(linha)  # Fora do for interno
    return dados_combinados_tabela

Faça o teste, movendo o dados_combinados_tabela.append(linha) para fora do for interno e observe se funciona como esperado. E você pode comparar a sua sintaxe com o próprio código da aula.

Espero ter ajudado, conte sempre com o fórum.

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