Como copiar e mover arquivos em Python? Guia prático

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Copiar e mover arquivos em Python: trabalhando com os módulos shutil e os

Desenvolver em Python frequentemente exige operações com arquivos e diretórios. Criar backups, processar uploads de usuários, organizar a estrutura de projetos, implantar aplicações — todas essas tarefas requerem gerenciamento programático do sistema de arquivos. Automatizar essas operações simplifica drasticamente o gerenciamento de dados e elimina a necessidade de executar tarefas repetitivas manualmente.

O módulo shutil em Python fornece utilitários de alto nível para trabalhar com arquivos e diretórios. Combinado com o módulo os, ele forma um conjunto poderoso de ferramentas multiplataforma para criar scripts flexíveis de gerenciamento do sistema de arquivos. Ambos os módulos fazem parte da biblioteca padrão do Python e estão disponíveis sem instalação adicional.

Visão geral do módulo shutil

O módulo shutil, cujo nome vem de "shell utility", é um conjunto de funções para operações de alto nível com arquivos e diretórios. As principais funções do módulo incluem:

  • copy() — copia um arquivo sem preservar metadados
  • copy2() — copia um arquivo preservando todos os metadados
  • copytree() — copia diretórios inteiros recursivamente
  • move() — move arquivos e pastas para um novo local
  • rmtree() — remove diretórios recursivamente com todo o conteúdo
  • copyfileobj() — copia objetos de arquivo byte a byte

O módulo shutil se integra eficientemente com o módulo os e é adequado tanto para pequenos scripts de automação quanto para grandes aplicações de nível corporativo.

Métodos de cópia de arquivos

Cópia básica com shutil.copy()

A função shutil.copy() realiza uma cópia simples do conteúdo do arquivo sem transferir metadados:

import shutil

origem = 'pasta_origem/exemplo.txt'
destino = 'pasta_destino/exemplo.txt'
shutil.copy(origem, destino)

Esta função copia apenas o conteúdo do arquivo. Metadados como data de criação, hora da última modificação e permissões de acesso não são preservados. A função é análoga ao comando cp em sistemas Unix/Linux sem flags de preservação de atributos.

É importante lembrar que, se o diretório de destino não existir, ocorrerá um erro. Recomenda-se verificar previamente a existência do diretório de destino ou criá-lo programaticamente.

Cópia com preservação de metadados: shutil.copy2()

Quando for necessário preservar todas as informações do arquivo, incluindo carimbos de data/hora, proprietário e permissões de acesso, utilize a função copy2():

shutil.copy2('arquivo.txt', 'backup/arquivo.txt')

Este método é especialmente útil ao criar backups, migrar projetos entre diferentes sistemas ou quando a preservação dos atributos originais dos arquivos é crítica. A função copy2() garante a reprodução mais fiel possível do arquivo original no novo local.

Cópia de diretórios

Cópia recursiva com shutil.copytree()

Para copiar diretórios inteiros com todos os subdiretórios e arquivos aninhados, use a função copytree():

shutil.copytree('projeto_antigo', 'projeto_novo')

Por padrão, a função copytree() gera um erro FileExistsError se o diretório de destino já existir. A partir do Python 3.8, é possível usar o parâmetro dirs_exist_ok=True para permitir a sobrescrita ou complementação do conteúdo:

shutil.copytree('projeto_antigo', 'projeto_novo', dirs_exist_ok=True)

A função funciona recursivamente e é aplicada nos seguintes cenários:

  • Clonagem de templates de projetos

Blogs

Book Recommendations