Aprendendo Python? Veja como copiar um arquivo
Você quer melhorar suas habilidades em Python? Então você pode tentar realizar algumas tarefas em seu computador com Python. Copiar e colar arquivos de um diretório para outro com Python é uma maneira divertida de fazer isso.
Além de ser divertido, ele permite que você leia e grave arquivos rapidamente, sem se distrair do código. Se você é novo no Python, é uma habilidade que você ainda precisa aprender de uma forma ou de outra. Então, vamos descobrir como copiar arquivos com Python por meio deste artigo.
Requisitos para copiar arquivos com Python
Existem muitas maneiras de copiar e colar arquivos com Python. Portanto, o requisito para fazer isso varia e depende do método que você decidir usar.
Embora você possa não precisar de módulos extras para copiar arquivos com Python, você ainda pode usar bibliotecas integradas, se desejar.
Por exemplo, se você deseja usar o método os , você precisa importá-lo para o seu código. No entanto, uma das maneiras populares de copiar arquivos com Python é usando a biblioteca shutil .
Vamos ver como podemos usar esses vários métodos para copiar arquivos com Python.
Como copiar arquivos usando a biblioteca Shutil integrada do Python
O módulo shutil é uma biblioteca Python integrada e poderosa para ler e escrever arquivos rapidamente em Python.
Para usá-lo, você só precisa fornecer o caminho completo dos arquivos de origem e destino.
Em essência, o shutil assume este formato:
shutil.copy([source directory path], [destination directory path], follow_symlinks=True)
Por exemplo, o código a seguir usa shutil.copy () para copiar um arquivo chamado copy.txt de uma pasta chamada my_folder para outra chamada destination . Em seguida, ele renomeia o arquivo de destino como newFile.txt :
import shutil
sourceFile = "C:/Users/some_directories/my_folder/copy.txt"
destinationFile = "C:/Users/some_directories/destination/newFile.txt"
shutil.copy(sourceFile, destinationFile, follow_symlinks=True)
Observe que você pode escrever seu código em qualquer editor de código de sua escolha . Você pode então executá-lo usando a linha de comando.
No entanto, você também pode usar o Python Integrated Development Environment (IDLE) padrão se não estiver familiarizado com a execução do Python por meio da linha de comando.
O método shutil.copy não copia os metadados do arquivo de origem. Em essência, sua máquina vê o arquivo de destino como um arquivo inteiramente novo e fornece a ele novos metadados.
No entanto, para copiar os metadados junto com o arquivo original, use o método shutil.copy2 :
import shutil
shutil.copy2(sourceFile, destinationFile, follow_symlinks=True)
O método acima preserva os metadados originais do arquivo antigo no arquivo de destino. Por exemplo, o arquivo de destino retém a data em que você criou o arquivo de origem, seu tamanho e outros atributos.
O argumento follow_symlinks é uma declaração de link simbólico que permite ao shutil seguir um caminho absoluto. Portanto, você precisa incluí-lo se os arquivos de origem e destino estiverem em diretórios diferentes.
Mas se ambos os arquivos estiverem em seu diretório de trabalho atual, você não precisa incluir um follow_symlinks . Se você fizer isso, o Python gerará uma exceção de sintaxe.
Portanto, se você estiver colando o arquivo de origem em seu diretório de trabalho atual, seu código deve ser semelhante a este:
import shutil
shutil.copy2(sourceFile, destinationFile)
Além de usar os métodos shutil acima, você também pode usar shutil.copyfile ou shutil.copyfileobj .
Usar shutil.copyfileobj é um pouco diferente, pois requer a função open embutida. Então, você precisa ler e escrever binário incluindo os argumentos "rb" e "wb" .
Vamos ver como o método shutil.copyfileobj funciona usando os mesmos diretórios que usamos anteriormente:
import shutil
sourceFilePath = open("C:/Users/some_directories/my_folder/copy.txt", "rb")
destinationFilePath = open("C:/Users/some_directories/destination/newFile.txt", "wb")
shutil.copyfileobj(sourceFilePath, destinationFilePath)
Observe que shutil.copyfileobj () não requer o argumento follow_symlinks .
No entanto, shutil.copyfile () funciona da mesma maneira que .copy e .copy2 . Eles diferem apenas insignificantemente em suas funções internas.
Para usar o método shutil.copyfile () :
import shutil
sourceFilePath = "C:/Users/some_directories/my_folder/copy.txt"
destinationFilePath = "C:/Users/some_directories/destination/newFile.txt"
shutil.copyfile(sourceFilePath, destinationFilePath)
Como copiar arquivos com o módulo OS
O módulo os usa dois métodos integrados para copiar arquivos; métodos os.system () e os.popen () .
O método os.system () permite que você imite o ambiente de linha de comando.
No entanto, uma deficiência dos métodos de sistema operacional é que eles apenas copiam arquivos dentro do seu diretório de trabalho atual.
Para usar o método os.system () no Windows:
import os
os.system('copy source.txt destination.txt)
Você também pode usar o comando de terminal do Windows xcopy integrado:
import os
os.system('xcopy source.txt destination.txt)
Para usar o método os.system no Linux, substitua copy por cp :
import os
os.system('cp source.txt destination.txt)
Como copiar arquivos usando o método os.popen
Para usar este método, substitua os.system () por os.popen () .
No Windows, use:
import os
os.popen('copy source.txt destination.txt)
Como fizemos com os.system () , substitua copy por cp para usar este método no Linux:
import os
os.popen('cp source.txt destination.txt)
Como copiar arquivos com o módulo de subprocesso do Python
Além dos métodos acima, você também pode usar a biblioteca subprocess () para copiar arquivos em Python:
import subprocess as sp
sp.call("copy sourceFile destinationFile", shell=True)
No entanto, no Linux, use:
import subprocess as sp
sp.call("cp sourceFile destinationFile", shell=True)
A biblioteca de subprocesso também usa o método subprocess.check_out () . Funciona da mesma forma que subprocess.call () :
import subprocess as sp
sp.check_out("copy sourceFile destinationFile", shell=True)
No Linux, substitua copy por cp :
import subprocess as sp
sp.check_out("cp sourceFile destinationFIle", shell=True)
No entanto, como os métodos os, os métodos de subprocesso funcionam apenas com arquivos em seu diretório de trabalho atual.
Nota: Você também pode copiar arquivos em uma pasta se ela estiver no mesmo diretório de trabalho do arquivo de origem. Tudo o que você precisa fazer é substituir o nome do arquivo de destino pelo nome da pasta de destino. No entanto, certifique-se de que a pasta de destino e o arquivo de origem estejam em seu diretório de trabalho atual.
Como copiar arquivos em Python sem usar bibliotecas
Você também pode copiar arquivos em Python sem depender de nenhuma biblioteca. Como o método shutil, você só precisa dos caminhos completos dos diretórios de origem e destino.
Veja como fazer isso:
sourcePath = "C:/Users/source_directories/my_folder/copy.txt"
destinationPath = "C:/Users/some_directories/destination_directories/newFile.txt"
with open(sourcePath, "rb") as read:
with open(destinationPath, "wb") as myfile:
myfile.write(read.read())
Para tornar o código reutilizável , você pode modificá-lo em uma função:
def copyFile(source=None, destination=None):
if not (source and destination)==None:
with open(source, "rb") as read:
with open(destination, "wb") as myfile:
myfile.write(read.read())
else:
print("Please enter the source and destination paths")
copyFile(sourcePath, destinationPath)
É isso. Você acabou de fazer uma copiadora de arquivo reutilizável com Python sem usar nenhuma biblioteca.
Continue automatizando tarefas com Python
Além de ajudá-lo a manter o foco em seu código durante a construção de projetos, copiar arquivos com Python permite que você entenda melhor o gerenciamento de arquivos com Python. No entanto, brincar com as tarefas do Python é uma maneira de melhorar suas habilidades com o Python, especialmente se você for um iniciante.
Por exemplo, você pode alterar a data e a hora no seu PC com o módulo os. Você pode até escrever comandos bash personalizados com Python, se desejar.