Apprendre Python? Voici comment copier un fichier

Voulez-vous améliorer vos compétences Python? Ensuite, vous pouvez essayer d'effectuer certaines tâches sur votre ordinateur avec Python. Copier et coller des fichiers d'un répertoire à un autre avec Python est un moyen amusant de le faire.

En plus d'être amusant, il vous permet de lire et d'écrire rapidement des fichiers sans vous distraire de votre code. Si vous êtes nouveau dans Python, c'est une compétence que vous devrez peut-être encore acquérir d'une manière ou d'une autre. Alors, découvrons comment copier des fichiers avec Python à travers cet article.

Conditions requises pour la copie de fichiers avec Python

Il existe de nombreuses façons de copier et coller des fichiers avec Python. Ainsi, l'exigence pour le faire varie et dépend de la méthode que vous décidez d'utiliser.

Bien que vous n'ayez pas besoin de modules supplémentaires pour copier des fichiers avec Python, vous pouvez toujours utiliser des bibliothèques intégrées si vous le souhaitez.

Par exemple, si vous souhaitez utiliser la méthode os , vous devez l'importer dans votre code. Cependant, l'un des moyens les plus courants de copier des fichiers avec Python consiste à utiliser la bibliothèque shutil .

Voyons comment nous pouvons utiliser ces différentes méthodes pour copier des fichiers avec Python.

Comment copier des fichiers à l'aide de la bibliothèque Shutil intégrée de Python

Le module shutil est une bibliothèque Python intégrée et puissante pour lire et écrire rapidement des fichiers en Python.

Pour l'utiliser, il vous suffit de fournir le chemin complet des fichiers source et de destination.

En substance, shutil prend ce format:

 shutil.copy([source directory path], [destination directory path], follow_symlinks=True)

Par exemple, le code ci-dessous utilise shutil.copy () pour copier un fichier nommé copy.txt d'un dossier appelé my_folder dans un autre nommé destination . Il renomme ensuite le fichier de destination comme 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)

Notez que vous pouvez écrire votre code dans n'importe quel éditeur de code de votre choix . Vous pouvez ensuite l'exécuter en utilisant la ligne de commande.

Cependant, vous pouvez également utiliser l'environnement de développement intégré Python (IDLE) par défaut si vous n'êtes pas familiarisé avec l'exécution de Python via la ligne de commande.

Connexes: Commandes d'invite de commande (CMD) que vous devez connaître

La méthode shutil.copy ne copie pas les métadonnées du fichier source. Essentiellement, votre machine considère le fichier de destination comme un fichier entièrement nouveau et lui attribue de nouvelles métadonnées.

Cependant, pour copier les métadonnées avec le fichier d'origine, utilisez la méthode shutil.copy2 :

 import shutil
shutil.copy2(sourceFile, destinationFile, follow_symlinks=True)

La méthode ci-dessus préserve les métadonnées d'origine de l'ancien fichier dans le fichier de destination. Par exemple, le fichier de destination conserve la date à laquelle vous avez créé le fichier source, sa taille et d'autres attributs.

L'argument follow_symlinks est une déclaration de lien symbolique qui permet à shutil de suivre un chemin absolu. Par conséquent, vous devez l'inclure si les fichiers source et de destination se trouvent dans des répertoires différents.

Mais si les deux fichiers se trouvent dans votre répertoire de travail actuel, vous n'avez pas besoin d'inclure un follow_symlinks . Si vous le faites, Python lève une exception de syntaxe.

Donc, si vous collez le fichier source dans votre répertoire de travail actuel, votre code devrait ressembler à ceci:

 import shutil
shutil.copy2(sourceFile, destinationFile)

En plus d'utiliser les méthodes shutil ci-dessus, vous pouvez également utiliser shutil.copyfile ou shutil.copyfileobj .

L'utilisation de shutil.copyfileobj est un peu différente car elle nécessite la fonction ouverte intégrée. Ensuite, vous devez lire et écrire du binaire en incluant les arguments "rb" et "wb" .

Voyons comment la méthode shutil.copyfileobj fonctionne en utilisant les mêmes répertoires que nous avons utilisés précédemment:

 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)

Notez que shutil.copyfileobj () ne nécessite pas l'argument follow_symlinks .

Cependant, shutil.copyfile () fonctionne à peu près de la même manière .copy et .copy2 . Ils ne diffèrent que de manière insignifiante dans leurs fonctions internes.

Pour utiliser la méthode 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)

Comment copier des fichiers avec le module os

Le module os utilise deux méthodes intégrées pour copier des fichiers; méthodes os.system () et os.popen () .

La méthode os.system () vous permet d'imiter l'environnement de ligne de commande.

Cependant, un inconvénient des méthodes os est qu'elles ne copient que les fichiers dans votre répertoire de travail actuel.

Pour utiliser la méthode os.system () sous Windows:

 import os
os.system('copy source.txt destination.txt)

Vous pouvez également utiliser la commande de terminal Windows xcopy intégrée:

 import os
os.system('xcopy source.txt destination.txt)

Pour utiliser la méthode os.system sous Linux, remplacez copy par cp :

 import os
os.system('cp source.txt destination.txt)

Comment copier des fichiers à l'aide de la méthode os.popen

Pour utiliser cette méthode, remplacez os.system () par os.popen () .

Sous Windows, utilisez:

 import os
os.popen('copy source.txt destination.txt)

Comme nous l'avons fait avec os.system () , remplacez copy par cp pour utiliser cette méthode sous Linux:

 import os
os.popen('cp source.txt destination.txt)

Comment copier des fichiers avec le module de sous-processus de Python

En plus des méthodes ci-dessus, vous pouvez également utiliser la bibliothèque subprocess () pour copier des fichiers en Python:

 import subprocess as sp
sp.call("copy sourceFile destinationFile", shell=True)

Cependant, sous Linux, utilisez:

 import subprocess as sp
sp.call("cp sourceFile destinationFile", shell=True)

La bibliothèque de sous- processus utilise également la méthode subprocess.check_out () . Cela fonctionne de la même manière que subprocess.call () :

 import subprocess as sp
sp.check_out("copy sourceFile destinationFile", shell=True)

Sous Linux, remplacez copy par cp :

 import subprocess as sp
sp.check_out("cp sourceFile destinationFIle", shell=True)

Cependant, comme les méthodes os, les méthodes de sous-processus ne fonctionnent qu'avec les fichiers de votre répertoire de travail actuel.

Remarque: vous pouvez également copier des fichiers dans un dossier s'il se trouve dans le même répertoire de travail que le fichier source. Tout ce que vous avez à faire est de remplacer le nom du fichier de destination par le nom du dossier de destination. Cependant, assurez-vous que le dossier de destination et le fichier source se trouvent dans votre répertoire de travail actuel.

Comment copier des fichiers en Python sans utiliser de bibliothèques

Vous pouvez également copier des fichiers en Python sans dépendre d'aucune bibliothèque. Comme la méthode shutil, vous n'avez besoin que des chemins complets des répertoires source et de destination.

Voici comment y parvenir:

 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())

Pour rendre le code réutilisable , vous pouvez le modifier en fonction:

 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)

C'est tout. Vous venez de créer un copieur de fichiers réutilisable avec Python sans utiliser de bibliothèque.

Continuez à automatiser les tâches avec Python

En plus de vous aider à rester concentré sur votre code lors de la création de projets, la copie de fichiers avec Python vous permet de mieux comprendre la gestion de fichiers avec Python. Cependant, jouer avec les tâches Python est un moyen d'améliorer vos compétences Python, surtout si vous êtes un débutant.

Par exemple, vous pouvez changer la date et l'heure sur votre PC avec le module os. Vous pouvez même écrire des commandes bash personnalisées avec Python si vous le souhaitez.