Olá, caro leitor! Seja muito bem-vindo a mais uma edição da "Dicas Pythonicas".
Aqui no pyPRO, buscamos sempre mostrar soluções eficientes e Pythonicas para facilitar suas tarefas de programação.
Imagine que você está organizando fotos de uma viagem inesquecível. Você quer criar cópias de segurança, mas fazer isso manualmente, arquivo por arquivo, seria um pesadelo. E se eu te disser que, com apenas uma linha de código em Python, você pode automatizar esse processo de forma rápida, segura e eficiente?
Hoje, vamos explorar não só o básico da cópia de arquivos com shutil.copyfile(), mas também mergulhar em alternativas mais robustas, boas práticas e até como lidar com erros comuns. Vamos lá?
1. O Jeito Pythonico: shutil.copyfile()
A maneira mais simples e direta de copiar um arquivo em Python é usando a função copyfile() do módulo shutil. Veja como funciona:
from shutil import copyfile
copyfile("origem.txt", "destino.txt")
Como isso funciona?
- shutil é um módulo da biblioteca padrão do Python especializado em operações de arquivos e diretórios.
- copyfile() copia o conteúdo (não os metadados, como permissões) de um arquivo para outro.
- Se o arquivo de destino já existir, ele será sobrescrito silenciosamente (cuidado!).
Quando usar?
Cópias rápidas em scripts simples. E também em situações onde você só precisa do conteúdo, sem metadados.
2. Indo Além: Outras Funções do shutil
E se você precisar de mais controle? O shutil oferece outras funções úteis:
a) shutil.copy() – Copia o arquivo e preserva permissões
import shutil
shutil.copy("origem.txt", "destino.txt") # Copia conteúdo + permissões
b) shutil.copy2() – Copia conteúdo e metadados (como timestamps)
shutil.copy2("origem.txt", "destino.txt") # Igual ao cp -p no Linux
c) shutil.copytree() – Copia uma pasta inteira (recursivamente)
shutil.copytree("pasta_origem", "pasta_destino")
3. Cuidados e Boas Práticas
Verifique se o arquivo existe antes de copiar
Evite erros usando os.path.exists():
import os
if os.path.exists("origem.txt"):
shutil.copyfile("origem.txt", "destino.txt")
else:
print("Arquivo não encontrado!")
Use caminhos absolutos para evitar confusão
import os
origem = os.path.abspath("documentos/origem.txt")
destino = os.path.abspath("backup/destino.txt")
shutil.copyfile(origem, destino)
Tratamento de erros com try-except
try:
shutil.copyfile("origem.txt", "destino.txt")
except FileNotFoundError:
print("Erro: Arquivo de origem não encontrado!")
except PermissionError:
print("Erro: Sem permissão para escrever no destino!")
4. Alternativas Avançadas
pathlib (Python 3.4+ – Mais Moderno e Legível)
from pathlib import Path
origem = Path("origem.txt")
destino = Path("destino.txt")
destino.write_text(origem.read_text()) # Copia o conteúdo
Copiar arquivos grandes com buffers (eficiente em memória)
def copiar_lento(origem, destino, buffer_size=1024*1024):
with open(origem, 'rb') as src, open(destino, 'wb') as dst:
while True:
dados = src.read(buffer_size)
if not dados:
break
dst.write(dados)
5. Caso Real: Backup Automatizado de Fotos
Suponha que você queira copiar todas as fotos .jpg de uma pasta para um backup:
import os
import shutil
pasta_origem = "fotos_viagem"
pasta_backup = "backup_fotos"
os.makedirs(pasta_backup, exist_ok=True)
for arquivo in os.listdir(pasta_origem):
if arquivo.endswith(".jpg"):
origem = os.path.join(pasta_origem, arquivo)
destino = os.path.join(pasta_backup, arquivo)
shutil.copy2(origem, destino)
print("Backup concluído com sucesso!")
E assim...
Agora você já sabe não só copiar arquivos, mas também escolher a melhor abordagem para cada situação.
Espero que esta dica te ajude a trabalhar com arquivos de forma eficiente em Python. Fique atento à próxima edição, onde traremos mais dicas úteis e práticas!
Um forte abraço,
Prof. Dr. Dilermando Piva Jr.
Idealizador do pyPRO
Visite: https://pypro.com.br para mais informações sobre Python, Ciência de Dados e Git/GitHub.