Faça uma função para ler os dados a partir dos arquivos indicados, com os números de observações diárias e mensais das manchas solares e armazená-los em dicionários diferentes, para cada ano, para cada tipo (diário ou mensal). As observações diárias serão armazenadas por mês, para cada ano.
Passo 1
Beleza, aqui a ideia é criar uma função em Python que leia dois arquivos – um com observações mensais de manchas solares e outro com observações diárias – e guarde tudo em dois dicionários bem organizadinhos. Cada dicionário vai ter como chave o ano, e dentro dele:
- No dicionário “mensal”: mês → valor da observação mensal.
- No dicionário “diário”: mês → lista com os valores diários daquele mês.
Conteúdo da matéria:
- Leitura de arquivos em Python (
open
,for line in file
) - Trabalhar com dicionários
- Converter strings em inteiros (
int()
) - Laços de repetição e condicionais
Vamos precisar entender como abrir arquivos, iterar linha a linha, dar um
split()
para quebrar em campos, converter tudo para número, e guardar nas estruturas.Passo 2
Primeira coisa: criar a função e inicializar dois dicionários vazios:
def ler_dados(daily_file, monthly_file):
dados_mensais = {} # vai ficar {ano: {mes: valor_mensal, ...}, ...}
dados_diarios = {} # vai ficar {ano: {mes: [v1, v2, ...], ...}, ...}
# vamos preencher esses dois e depois retornar
Passo 3
Lendo o arquivo mensal. Supondo que cada linha tenha “ano mês valor” separados por espaços e que a primeira linha seja cabeçalho:
with open(monthly_file, 'r') as f_mes:
next(f_mes) # pula a primeira linha (cabeçalho)
for line in f_mes:
parts = line.strip().split()
ano = int(parts[0])
mes = int(parts[1])
valor = int(parts[2])
# se ainda não existe o ano no dicionário, criamos um dict vazio
if ano not in dados_mensais:
dados_mensais[ano] = {}
# guardamos o valor do mês
dados_mensais[ano][mes] = valor
Aqui usamos:
strip()
para tirar espaços em branco no início/fimsplit()
para separar em lista de stringsint()
para converter em númeroif ano not in dict
para inicializar o ano
Passo 4
Lendo o arquivo diário. Agora cada linha tem “ano mês dia valor”. Queremos guardar só o valor, agrupando por ano e por mês em listas:
with open(daily_file, 'r') as f_dia:
next(f_dia) # pula o cabeçalho
for line in f_dia:
parts = line.strip().split()
ano = int(parts[0])
mes = int(parts[1])
# dia = int(parts[2]) # não precisamos do dia pra indexar
valor = int(parts[3])
# inicializa ano e mês se não existirem
if ano not in dados_diarios:
dados_diarios[ano] = {}
if mes not in dados_diarios[ano]:
dados_diarios[ano][mes] = []
# adiciona o valor na lista do mês
dados_diarios[ano][mes].append(valor)
Passo a passo:
- Abrimos o arquivo diário.
- Pulamos cabeçalho.
- Para cada linha, extraímos ano, mês e valor.
- Garantimos que
dados_diarios[ano]
edados_diarios[ano][mes]
existam. - Usamos
.append()
para enfileirar cada observação diária.
Passo 5
Por fim, só falta retornar os dois dicionários para quem chamou a função:
return dados_diarios, dados_mensais
Resposta
def ler_dados(daily_file, monthly_file):
"""
Lê dois arquivos com observações de manchas solares:
- daily_file: ano mês dia valor
- monthly_file: ano mês valor
Retorna:
dados_diarios, dados_mensais
onde:
dados_diarios = {ano: {mes: [valores_diários], ...}, ...}
dados_mensais = {ano: {mes: valor_mensal, ...}, ...}
"""
dados_mensais = {}
dados_diarios = {}
# Processa observações mensais
with open(monthly_file, 'r') as f_mes:
next(f_mes) # pula cabeçalho
for line in f_mes:
parts = line.strip().split()
ano = int(parts[0])
mes = int(parts[1])
valor = int(parts[2])
if ano not in dados_mensais:
dados_mensais[ano] = {}
dados_mensais[ano][mes] = valor
# Processa observações diárias
with open(daily_file, 'r') as f_dia:
next(f_dia) # pula cabeçalho
for line in f_dia:
parts = line.strip().split()
ano = int(parts[0])
mes = int(parts[1])
valor = int(parts[3])
if ano not in dados_diarios:
dados_diarios[ano] = {}
if mes not in dados_diarios[ano]:
dados_diarios[ano][mes] = []
dados_diarios[ano][mes].append(valor)
return dados_diarios, dados_mensais