Fundamentos do sistema de arquivos em Python
Trabalhar com o sistema de arquivos é uma das tarefas mais comuns no desenvolvimento com Python. Esse processo inclui criar e excluir arquivos, copiá-los, movê-los, renomeá-los, além de criar diretórios e verificar se eles existem. As operações com arquivos são a base para automação de processos, desenvolvimento web, análise de dados, gerenciamento de configurações e implantação de aplicações.
O Python oferece um conjunto robusto de bibliotecas nativas para trabalhar com o sistema de arquivos de forma eficiente. As principais ferramentas são os módulos os, shutil e pathlib. Essas bibliotecas cobrem praticamente todos os cenários possíveis, desde operações básicas até tarefas avançadas.
Movendo arquivos em Python
Usando a função shutil.move()
Quando você precisa mover um arquivo de um diretório para outro, a maneira mais simples e eficaz é usar a função shutil.move(). Ela funciona de forma similar ao comando mv em sistemas Linux e Unix.
import shutil
shutil.move('source/arquivo.txt', 'destination/arquivo.txt')
A função shutil.move() lida automaticamente tanto com arquivos individuais quanto com diretórios inteiros. Durante a movimentação, o arquivo também pode ser renomeado. É importante saber que, se um arquivo com o mesmo nome já existir na pasta de destino, ele será sobrescrito sem aviso.
Criando diretórios ao mover arquivos
Ao mover arquivos, muitas vezes é necessário criar novos diretórios. A abordagem a seguir resolve esse problema:
import os
import shutil
origem = 'dados/relatorio.txt'
destino_dir = 'arquivo'
os.makedirs(destino_dir, exist_ok=True)
shutil.move(origem, os.path.join(destino_dir, 'relatorio.txt'))
A função os.makedirs() com o parâmetro exist_ok=True cria uma cadeia de diretórios se eles não existirem e não gera erro se os diretórios já existirem.
Movendo diretórios
A função shutil.move() também suporta a movimentação de diretórios inteiros:
shutil.move('pasta_antiga', 'novo_local/pasta_antiga')
Copiando arquivos e criando links
Cópia básica de arquivos
Para copiar arquivos, o Python oferece várias funções com diferentes funcionalidades:
import shutil
# Copiar o conteúdo do arquivo
shutil.copy('arquivo.txt', 'backup/arquivo.txt')
A função copy() copia apenas o conteúdo do arquivo, mas não preserva os metadados. Para uma cópia completa, mantendo todos os atributos do arquivo, use copy2():
shutil.copy2('arquivo.txt', 'backup/arquivo.txt')
Copiando diretórios
Para copiar diretórios inteiros com todo o seu conteúdo, use a função copytree():
shutil.copytree('projeto', 'backup_projeto')
Criando hard links
Um hard link é um nome adicional para um arquivo existente no sistema de arquivos:
import os
os.link('arquivo.txt', 'arquivo_linkado.txt')
Um hard link significa que um único arquivo físico está acessível por vários caminhos diferentes. As alterações no conteúdo do arquivo são refletidas em todos os links. O número de hard links pode ser verificado com os.stat().st_nlink.
Gerenciando diretórios
Criando diretórios
O Python oferece duas funções principais para criar diretórios:
import os
# Criar um único diretório
os.mkdir('nova_pasta')
# Criar uma estrutura aninhada de diretórios
os.makedirs('pai/filho/neto', exist_ok=True)
A função mkdir() cria apenas um diretório e gera uma exceção FileExistsError se o diretório já existir.