A manipulação de arquivos e diretórios é uma tarefa fundamental. O Python oferece módulos embutidos para ler, escrever, criar, excluir e obter informações sobre arquivos e pastas no sistema de arquivos.
- Usando a Instrução
withpara Gestão Segura de Recursos
A maneira recomendada de trabalhar com arquivos é utilizar a instrução with. Ela garante que o recurso do arquivo seja liberado corretamente, mesmo que ocorra um erro durante o processamento.
# Cria (ou sobrescreve) um arquivo chamado 'registro.txt' e escreve nele
with open('registro.txt', 'w') as arquivo_registro:
arquivo_registro.write('Primeiro dado importante.\n')
arquivo_registro.write('Segunda linha de informações.\n')
# O arquivo é fechado automaticamente ao sair do bloco `with`
- Métodos Básicos para Leitura de Conteúdo
Após abrir um arquivo em modo de leitura ('r'), podemos utilizar diferentes métodos para acessar seu conteúdo.
# Ler todo o conteúdo de uma vez
with open('registro.txt', 'r') as arquivo_para_ler:
texto_completo = arquivo_para_ler.read()
print(texto_completo)
# Iterar sobre o arquivo linha a linha (eficiente para arquivos grandes)
with open('registro.txt', 'r') as fonte_de_dados:
for linha in fonte_de_dados:
print(linha.strip()) # strip() remove caracteres de nova linha
- Módulos
oseos.pathpara Operações no Sistema
Para interagir com o sistema de arquivos além da simples leitura e escrita, utilizaoms os módulos os e os.path.
import os
import os.path
# Obter o diretório de trabalho atual
local_atual = os.getcwd()
print(f'Diretório de trabalho: {local_atual}')
# Listar o conteúdo de um diretório
elementos = os.listdir(local_atual)
for elemento in elementos:
print(f' - {elemento}')
# Verificar existência e tipo de um caminho
caminho_teste = 'registro.txt'
print(f'"{caminho_teste}" existe?', os.path.exists(caminho_teste))
print(f'É um arquivo?', os.path.isfile(caminho_teste))
caminho_diretorio = local_atual
print(f'É um diretório?', os.path.isdir(caminho_diretorio))
- Construindo e Decompondo Caminhos de Arquivo
O módulo os.path auxilia na construção e aálise de caminhos de forma independente do sistema operacional.
# Construir um caminho completo de forma segura
pasta_documentos = '/home/usuario/documentos'
nome_relatorio = 'relatorio_anual.pdf'
caminho_completo = os.path.join(pasta_documentos, nome_relatorio)
print(f'Caminho construído: {caminho_completo}')
# Decompor um caminho em seu diretório e nome de arquivo
diretorio, nome_arquivo = os.path.split(caminho_completo)
print(f'Diretório: {diretorio}')
print(f'Arquivo: {nome_arquivo}')
# Obter a extensão de um arquivo
_, extensao = os.path.splitext(nome_relatorio)
print(f'Extensão: {extensao}')
- Criando e Removendo Diretórios
É possível criar tanto diretórios simples quanto uma estrutura completa de diretórios aninhados.
# Criar um único diretório
novo_pasta = os.path.join(local_atual, 'temp_data')
if not os.path.exists(novo_pasta):
os.mkdir(novo_pasta)
# Criar uma hierarquia de diretórios (incluindo intermediários)
estrutura_complexa = os.path.join(novo_pasta, 'ano', 'mes')
os.makedirs(estrutura_complexa, exist_ok=True) # exist_ok=True evita erro se já existir
# Remover diretórios
os.rmdir(estrutura_complexa) # Remove apenas se estiver vazio
# Para remover um diretório não vazio e todo seu conteúdo, use shutil.rmtree
import shutil
shutil.rmtree(novo_pasta)
- Percorrendo uma Árvore de Diretórios
A função os.walk() é uma ferramenta poderosa para gerar os nomes de arquivos em uma árvore de diretórios, percorrendo-a de cima para baixo (ou de baixo para cima).
# Percorrer um diretório recursivamente
raiz_diretorio = '/home/usuario/projetos'
for caminho_atual, subpastas, arquivos in os.walk(raiz_diretorio):
print(f'Analisando: {caminho_atual}')
print(f' Subpastas encontradas: {subpastas}')
for nome_arquivo in arquivos:
caminho_arquivo = os.path.join(caminho_atual, nome_arquivo)
print(f' Arquivo: {caminho_arquivo}')
- Gerenciando Arquivos: Remoção e Renomeação
Operações diretas como excluir e ranomear arquivos e diretórios são realizadas com funções do módulo os.
# Renomear um arquivo
arquivo_antigo = 'dados_brutos.csv'
arquivo_novo = 'dados_processados.csv'
if os.path.exists(arquivo_antigo):
os.rename(arquivo_antigo, arquivo_novo)
# Excluir um arquivo
if os.path.exists(arquivo_novo):
os.remove(arquivo_novo)
- Obtendo Metadados de um Arquivo
A função os.stat() recupera informações detalhadas sobre um arquivo, como tamanho e datas de modificação.
from datetime import datetime
caminho_arquivo = 'registro.txt'
if os.path.isfile(caminho_arquivo):
stat_info = os.stat(caminho_arquivo)
tamanho_em_bytes = stat_info.st_size
data_modificacao = datetime.fromtimestamp(stat_info.st_mtime)
print(f'Tamanho: {tamanho_em_bytes} bytes')
print(f'Última modificação: {data_modificacao}')