Manipulação de Arquivos e Diretórios em Python

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.

  1. Usando a Instrução with para 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`

  1. 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

  1. Módulos os e os.path para 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))

  1. 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}')

  1. 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)

  1. 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}')

  1. 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)

  1. 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}')

Tags: Python manipulação de arquivos módulo os caminhos de arquivo operações de diretório

Publicado em 6-15 05:00 por Thomas