Skip to content

Instantly share code, notes, and snippets.

@gpupo
Last active June 29, 2023 19:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gpupo/7e934be8ddfbe7642a9ce43182f34684 to your computer and use it in GitHub Desktop.
Save gpupo/7e934be8ddfbe7642a9ce43182f34684 to your computer and use it in GitHub Desktop.
Desafios para estudantes de ETL

Aqui está um exercício simples para um estudante iniciante em Python, envolvendo a manipulação de dados de um arquivo JSON e a gravação desses dados em um arquivo CSV.

Suponha que você tenha um arquivo JSON chamado "dados.json" com a seguinte estrutura:

[
  {
    "nome": "João",
    "idade": 25,
    "cidade": "São Paulo"
  },
  {
    "nome": "Maria",
    "idade": 30,
    "cidade": "Rio de Janeiro"
  },
  {
    "nome": "Carlos",
    "idade": 35,
    "cidade": "Belo Horizonte"
  }
]

E você deseja ler esses dados do arquivo JSON e gravá-los em um arquivo CSV chamado "dados.csv" com as colunas "Nome", "Idade" e "Cidade".

Aqui está um exemplo de código que realiza essa tarefa:

import json
import csv

# Abre o arquivo JSON
with open('dados.json', 'r') as file:
    data = json.load(file)

# Abre o arquivo CSV para escrita
with open('dados.csv', 'w', newline='') as file:
    writer = csv.writer(file)

    # Escreve o cabeçalho do CSV
    writer.writerow(['Nome', 'Idade', 'Cidade'])

    # Escreve os dados do JSON no CSV
    for item in data:
        linha_atual = [
          #### Seu desafio é colocar aqui as 3 colunas Nome, Idade e Cidade #####
        ]
        writer.writerow(linha_atual)

print("CSV gerado com sucesso!")

Após executar esse código, ele lerá os dados do arquivo JSON, criará um arquivo CSV chamado "dados.csv" e escreverá os dados nele. A saída será:

CSV gerado com sucesso!

Aqui está uma amostra do arquivo CSV esperado:

Nome,Idade,Cidade
João,25,São Paulo
Maria,30,Rio de Janeiro
Carlos,35,Belo Horizonte

Bora resolver esse exercício

Aqui está um exercício simples para um estudante iniciante em Python, envolvendo a manipulação de dados em que você partirá de um arquivo JSON multidimensional e gravará os dados em um arquivo CSV. Vamos supor que você tenha um arquivo JSON chamado "dados.json" com a seguinte estrutura:

{
  "pessoas": [
    {
      "nome": "João",
      "idade": 25,
      "cidade": "São Paulo"
    },
    {
      "nome": "Maria",
      "idade": 30,
      "cidade": "Rio de Janeiro"
    },
    {
      "nome": "Carlos",
      "idade": 35,
      "cidade": "Belo Horizonte"
    }
  ],
  "veiculos": [
    {
      "marca": "Toyota",
      "modelo": "Corolla",
      "ano": 2018
    },
    {
      "marca": "Honda",
      "modelo": "Civic",
      "ano": 2020
    },
    {
      "marca": "Volkswagen",
      "modelo": "Golf",
      "ano": 2017
    }
  ]
}

Neste exemplo, temos duas listas de objetos: "pessoas" e "veiculos". Você deseja ler esses dados do arquivo JSON e gravá-los em um arquivo CSV separado para cada lista, onde cada linha representa um objeto e as colunas representam os atributos de cada objeto.

Aqui está um exemplo de código em Python que realiza essa tarefa:

import json
import csv

# Abre o arquivo JSON
with open('dados.json', 'r') as file:
    data = json.load(file)

# Processa cada lista do JSON e cria um arquivo CSV correspondente
for key, values in data.items():
    # Gera o nome do arquivo CSV baseado na chave do JSON
    csv_filename = key + '.csv'

    # Abre o arquivo CSV para escrita
    with open(csv_filename, 'w', newline='') as file:
        writer = csv.writer(file)

        # Obtém as chaves do primeiro item para escrever como cabeçalho do CSV
        headers = list(values[0].keys())
        writer.writerow(headers)

        # Escreve os dados de cada item no CSV
        for item in values:
            writer.writerow(list(item.values()))
            
    print(f"CSV '{csv_filename}' gerado com sucesso!")

Após executar esse código, ele lerá os dados do arquivo JSON, criará dois arquivos CSV: "pessoas.csv" e "veiculos.csv".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment