Considere um arquivo contendo as turmas e os nomes de alunos matriculados em uma determinada matéria. Cada linha do arquivo possui a turma do aluno (A1, A2, D1 ou D2), o caractere de tabulação (
) e o nome do aluno. Crie esse arquivo. Desenvolva um programa que leia esse arquivo e separe os alunos de acordo com a turma, salvando os nomes em arquivos separados. Os arquivos criados devem possuir apenas o nome dos alunos, um em cada linha.
Exemplo:
Arquivo de entrada: alunos.txt (arquivo contendo a turma e nome de todos os alunos)
Arquivos de saída: alunos_turma_A1.txt (arquivo contendo o nome dos alunos da turma A1)
alunos_turma_A2.txt (arquivo contendo o nome dos alunos da turma A2)
alunos_turma_D1.txt (arquivo contendo o nome dos alunos da turma D1)
alunos_turma_D2.txt (arquivo contendo o nome dos alunos da turma D2)
Arquivo de entrada: alunos.txt (arquivo contendo a turma e nome de todos os alunos)
Arquivos de saída: alunos_turma_A1.txt (arquivo contendo o nome dos alunos da turma A1)
alunos_turma_A2.txt (arquivo contendo o nome dos alunos da turma A2)
alunos_turma_D1.txt (arquivo contendo o nome dos alunos da turma D1)
alunos_turma_D2.txt (arquivo contendo o nome dos alunos da turma D2)
Passo 1
O que o problema pede:
- Criar um arquivo de entrada chamado, por exemplo,
alunos.txt, cuja cada linha contém a turma e o nome do aluno separados por um caractere de tabulação (\t). - Desenvolver um programa que leia esse arquivo e gere quatro arquivos de saída:
alunos_turma_A1.txt,alunos_turma_A2.txt,alunos_turma_D1.txtealunos_turma_D2.txt. - Cada arquivo de saída deve conter apenas os nomes dos alunos daquela turma, um nome por linha.
Informações relevantes do enunciado:
- As turmas possíveis são
A1,A2,D1,D2. - O separador entre turma e nome é o caractere de tabulação (
\t). - Os arquivos de saída devem ter somente os nomes, um por linha.
- O enunciado pede também que eu “Crie esse arquivo” (ou seja, vou mostrar como criar um exemplo de
alunos.txt).
Passo 2
Vou criar um exemplo do arquivo
alunos.txt. Cada linha tem a turma, depois um \t (tab), depois o nome do aluno. Exemplo de conteúdo que você pode criar para testar:A1\tAlice Silva
A2\tBruno Costa
D1\tCarla Pereira
D2\tDiego Souza
A1\tEduarda Lima
A2\tFábio Rocha
D1\tGisele Moraes
D2\tHenrique Alves
Para criar esse arquivo rapidamente (no mesmo diretório do programa), você pode usar este pequeno script Python (ele cria
alunos.txt com o conteúdo acima):conteudo = [
"A1\tAlice Silva",
"A2\tBruno Costa",
"D1\tCarla Pereira",
"D2\tDiego Souza",
"A1\tEduarda Lima",
"A2\tFábio Rocha",
"D1\tGisele Moraes",
"D2\tHenrique Alves",
]
with open("alunos.txt", "w", encoding="utf-8") as f:
for linha in conteudo:
f.write(linha + "\n")
Explicação rápida: esse script monta uma lista de linhas e escreve cada linha seguida de
\n no arquivo alunos.txt. Use encoding="utf-8" para garantir compatibilidade com acentos.Passo 3
Plano de solução (passos lógicos do programa):
- Abrir
alunos.txtpara leitura. - Ler linha a linha.
- Para cada linha: remover espaços/quebras no início/fim, pular linhas vazias; dividir a linha no caractere
\tem duas partes: turma e nome. - Validar que a turma está entre
A1,A2,D1,D2. Se não, opcionalmente ignorar ou registrar um aviso. - Guardar o nome na lista correspondente à turma (manter ordem original).
- Após ler tudo, criar/abrir os quatro arquivos de saída e escrever, em cada um, um nome por linha (apenas o nome, sem a turma).
- Fechar arquivos (com
with, isso é automático).
Vou usar Python porque é direto, legível e comum em provas/listas práticas. A solução usa apenas conceitos básicos: leitura de arquivos, manipulação de strings, dicionários e escrita de arquivos.
Passo 4
Conceitos essenciais que vou usar (explicados de forma didática):
- Abrir arquivos com
with open(path, mode, encoding) as f:: garante que o arquivo será fechado automaticamente ao sair do blocowith.mode="r"para ler,"w"para escrever. - Ler linhas:
for linha in f:percorre cada linha do arquivo. Cadalinhacontém o caractere de nova linha final\n(geralmente), por isso usamoslinha.strip()para remover espaços em branco no início/fim, inclusive\n. - Separar a turma do nome:
partes = linha.strip().split("\t", 1)— aqui eu usosplit("\t", 1)para dividir apenas na primeira tab (caso o nome tenha tabs inesperados).partes[0]será a turma,partes[1]o nome. - Dicionário para agrupar:
grupos = {"A1": [], "A2": [], "D1": [], "D2": []}. Para cada aluno válido, façogrupos[turma].append(nome). - Escrita: para cada turma, abro
alunos_turma_<turma>.txtem modo"w"e escrevo cada nome seguido de\n.
Passo 5
Aqui está o programa completo em Python com comentários e explicações linha a linha. Ele implementa exatamente o plano do passo anterior:
# Programa para separar alunos por turma
# coloca este arquivo no mesmo diretório do alunos.txt ou ajuste o caminho
arquivo_entrada = "alunos.txt"
# Inicializa dícionario com listas vazias para cada turma esperada
grupos = {"A1": [], "A2": [], "D1": [], "D2": []}
# 1) Abrir o arquivo de entrada e ler linha a linha
with open(arquivo_entrada, "r", encoding="utf-8") as f:
for linha_num, linha in enumerate(f, start=1):
linha = linha.strip() # remove espaços e o '\n' no final
if not linha:
# pula linhas vazias
continue
# 2) Separe pela tabulação: isso retorna até 2 partes (turma, nome)
partes = linha.split("\t", 1)
if len(partes) != 2:
# linha mal formatada: podemos avisar (print) e pular
print(f"Aviso: linha {linha_num} não tem tabulador: '{linha}'")
continue
turma = partes[0].strip()
nome = partes[1].strip()
# 3) Valida a turma e adiciona o nome à lista correspondente
if turma in grupos:
grupos[turma].append(nome)
else:
# turma desconhecida: avisar e pular ou tratar como preferir
print(f"Aviso: turma desconhecida na linha {linha_num}: '{turma}'")
# 4) Para cada turma, criar arquivo de saída e escrever os nomes, um por linha
for turma, nomes in grupos.items():
nome_arquivo = f"alunos_turma_{turma}.txt"
with open(nome_arquivo, "w", encoding="utf-8") as fout:
for nome in nomes:
fout.write(nome + "\n")
print("Arquivos gerados para as turmas:", ", ".join(sorted(grupos.keys())))
Explicação das partes importantes do código:
enumerate(f, start=1): serve para ter o número da linha (linha_num) útil para mensagens de erro.linha.split("\t", 1): divide só na primeira tab, evitando problemas se o nome contiver tab acidental.grupos[turma].append(nome): mantém a ordem em que os nomes aparecem no arquivo original.- Ao escrever os arquivos, cada
nomeé seguido de\npara que fique um por linha.
Passo 6
Como rodar e verificar:
- Execute o script do Passo 2 para criar um
alunos.txtde teste (ou crie manualmente). - Salve o programa do Passo 5 em um arquivo, por exemplo,
separar_turmas.py. - No terminal, execute
python separar_turmas.py(oupython3 ..., dependendo do seu ambiente). - Após a execução, verifique que os arquivos
alunos_turma_A1.txt,alunos_turma_A2.txt,alunos_turma_D1.txtealunos_turma_D2.txtforam criados e que cada um contém somente os nomes, um por linha.
Possíveis cuidados/variações:
- Se o arquivo tiver linhas com turma não listada, o programa avisa e ignora essas linhas.
- Se quiser tratar nomes duplicados, você pode substituir a lista por um
setpara remover duplicatas, mas isso perde a ordem original. Em provas normalmente listas mantêm ordem. - Se o separador não for exatamente
\t, por exemplo um espaço, adaptesplit("\t", 1)para o separador correto. - Para grandes arquivos, essa solução carrega só listas de nomes (memória geralmente ok). Se o arquivo for muito grande, podemos escrever diretamente para os arquivos de saída conforme lemos (em vez de armazenar em dicionário), abrindo os quatro arquivos de saída antes do loop de leitura.
Passo 7
Exemplo do que será escrito nos arquivos de saída usando o
alunos.txt de exemplo do Passo 2:Conteúdo de
alunos_turma_A1.txt:Alice Silva
Eduarda Lima
Conteúdo de
alunos_turma_A2.txt:Bruno Costa
Fábio Rocha
Conteúdo de
alunos_turma_D1.txt:Carla Pereira
Gisele Moraes
Conteúdo de
alunos_turma_D2.txt:Diego Souza
Henrique Alves
Esses arquivos têm somente os nomes, um por linha, conforme exigido.
Resposta
alunos_turma_A1.txt
alunos_turma_A2.txt
alunos_turma_D1.txt
alunos_turma_D2.txt
alunos_turma_A2.txt
alunos_turma_D1.txt
alunos_turma_D2.txt