Desafio Python
Processar arquivo com pathlib e encoding
Enunciado
Dado um arquivo nomes.txt com um nome por linha (codificado em UTF-8), crie um programa que:
- Verifique se o arquivo existe usando
pathlib. - Leia todos os nomes, remova espaços em branco extras e os armazene em uma lista.
- Crie um novo arquivo
nomes_ordenados.txtcom os nomes em ordem alfabética, um por linha, também em UTF-8. - Imprima quantos nomes foram processados.
Requisitos
- Use
pathlib.Pathpara verificar a existência do arquivo e manipular caminhos. - Leia e escreva arquivos com
witheencoding='utf-8'. - Remova espaços em branco das linhas lidas (use
.strip()). - Ordene os nomes alfabeticamente antes de gravar.
- Imprima a contagem de nomes processados no formato:
Processados: N.
Código inicial
from pathlib import Path
# Seu código aqui
Saída esperada
Processados: 3
Ver dica
Use Path('nomes.txt').exists() para verificar. Para ler linhas, itere sobre o arquivo ou use .readlines().
Mostrar solução
from pathlib import Path
# Define os caminhos
entrada = Path('nomes.txt')
saida = Path('nomes_ordenados.txt')
# Verifica se o arquivo de entrada existe
if not entrada.exists():
print('Arquivo nomes.txt não encontrado.')
else:
# Lê os nomes, remove espaços e filtra linhas vazias
with entrada.open('r', encoding='utf-8') as f:
nomes = [linha.strip() for linha in f if linha.strip()]
# Ordena alfabeticamente
nomes.sort()
# Escreve o novo arquivo
with saida.open('w', encoding='utf-8') as f:
for nome in nomes:
f.write(nome + '\n')
# Imprime a contagem
print(f'Processados: {len(nomes)}')
Passo a passo
- Importa
Pathdo módulopathlib. - Cria objetos
Pathpara os arquivos de entrada e saída. - Verifica se o arquivo de entrada existe com
entrada.exists(). - Abre o arquivo com
entrada.open('r', encoding='utf-8')e lê as linhas. - Usa uma list comprehension para aplicar
.strip()e ignorar linhas vazias. - Ordena a lista com
nomes.sort(). - Abre o arquivo de saída no modo
'w'e grava cada nome seguido de\n. - Imprime a quantidade de nomes processados.
Por que funciona
O pathlib fornece uma forma orientada a objetos para manipular caminhos, incluindo verificação de existência. O with garante que os arquivos sejam fechados corretamente. O uso de .strip() remove espaços e quebras de linha, e a ordenação é feita antes da gravação. O encoding 'utf-8' assegura que caracteres especiais sejam tratados corretamente.
Erros comuns
- Não verificar a existência do arquivo: pode causar
FileNotFoundError. - Esquecer de remover
\ncom.strip(): os nomes ficariam com quebras de linha e a ordenação poderia ser afetada. - Não especificar
encoding='utf-8': pode causarUnicodeDecodeErrorou gravar caracteres errados. - Usar
'w'sem fechar corretamente: o arquivo pode ficar corrompido.
Outra forma de resolver
Usar open() diretamente em vez de Path.open():
from pathlib import Path
entrada = Path('nomes.txt')
if entrada.exists():
with open(entrada, 'r', encoding='utf-8') as f:
nomes = [linha.strip() for linha in f if linha.strip()]
nomes.sort()
with open('nomes_ordenados.txt', 'w', encoding='utf-8') as f:
f.write('\n'.join(nomes) + '\n')
print(f'Processados: {len(nomes)}')
Saída esperada
Processados: 3