Ir para o conteúdo
PyPro PyPro
Artigos Cursos Projetos Missão Sobre nós Contato

Dicas Pythônicas

Como Copiar um Arquivo do Disco em Python

Embora existam várias formas de fazer isso, uma das maneiras mais Pythonicas é...

Por Dilermando Piva Jr. · 27/01/2025

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.

← Voltar para artigos

pyPRO - Python para todos.

Instagram YouTube LinkedIn X (Twitter)