Como copiar um arquivo em Python

Azaz Farooq 30 janeiro 2023
  1. Shutil copyfile() Método para copiar arquivo em Python
  2. Shutil copy() Método para copiar arquivo com permissões
  3. Comparação entre os métodos copy() e copyfile()
  4. copyfileobj() Método para copiar objeto de arquivo
  5. copy2() Método para Preservar Metadados
  6. Conclusão dos métodos de cópia de um arquivo em Python
Como copiar um arquivo em Python

Python vem com vários módulos fora da caixa para suportar operações de E/S de arquivos (como SO, subprocesso e shutil). Você simplesmente copiará arquivos e diretórios utilizando o módulo shutil. Operações como duplicação, transferência ou exclusão de arquivos e diretórios são concluídas utilizando esta função utilitária. Aqui são discutidos quatro métodos como se segue.

Shutil copyfile() Método para copiar arquivo em Python

Ele copia o material de origem para um arquivo com o nome de destino. Se o destino não puder ser escrito, uma exceção IOError ocorrerá no processo de cópia. Se a origem e os arquivos de destino forem os mesmos, o SameFileError retorna. Os nomes da origem e do destino são fornecidos como strings.

copyfile(source_file, destination_file)

Os dispositivos de caracteres ou blocos e os tubos não são suportados por este método.

import shutil

source = r"C:\Users\DelftStack\Documents\test\test.txt"
destination = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copyfile(source, destination)

Shutil copy() Método para copiar arquivo com permissões

O método copy() funciona como o comando Unix cp. Ao copiar seu conteúdo, este método sincroniza as permissões do arquivo de destino com o arquivo fonte. Se você estiver copiando o mesmo arquivo, ele também lança o comando SameFileError. Sua sintaxe é a seguinte.

shutil.copy(src_file, dest_file, *, follow_symlinks=True)

Exemplo de Shutil copy() Método para copiar arquivo com permissões

import shutil

src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy(src, des)

Comparação entre os métodos copy() e copyfile()

  1. O método copy() freqüentemente define a permissão do arquivo à medida que o conteúdo é copiado, enquanto que o copyfile() copia apenas os dados.
  2. Essencialmente, em sua implementação, o método copyfile() utiliza o método copyfileobj(). Em comparação, o método copyfile() utiliza as funções copyfile() e copymode().
  3. O ponto acima deixa claro que copyfile() será um pouco mais rápido do que copy() porque há um trabalho extra em mãos com este último (preservação das permissões).

copyfileobj() Método para copiar objeto de arquivo

Esta função copia o arquivo para o objeto do caminho ou arquivo de destino. Se o objeto de destino for um objeto de arquivo, você precisa fechá-lo após chamar copyfileobj() diretamente. O tamanho do buffer é utilizado para especificar o comprimento do buffer. É o número de bytes retidos na memória durante o processo de cópia.

A sintaxe do método copyfileobj() está abaixo.

shutil.copyfileobj(src_file_object, dest_file_object[, length])
import shutil

filename1 = r"C:\Users\DelftStack\Documents\test\test.txt"
fileA = open(filename1, "rb")
filename2 = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
fileB = open(filename2, "wb")
shutil.copyfileobj(fileA, fileB)

copy2() Método para Preservar Metadados

O método copy2() é similar ao método copy(), mas além de copiar o conteúdo do arquivo, ele também preserva todos os metadados do arquivo fonte.

shutil.copy2(src_file, dest_file, *, follow_symlinks=True)

import shutil

src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy2(src, des)

Conclusão dos métodos de cópia de um arquivo em Python

No final, uma tabela é anexada para todos os métodos e ajuda a entender melhor a utilidade shutil.

Função copia metadados permissões de cópia pode usar tampão destino pode ser diretório
shutil.copy Não Sim Não Sim
shutil.copyfile Não Não Não Não
shutil.copy2 Sim Sim Não Sim
shutil.copyfileobj Não Não Sim Não

Artigo relacionado - Python File