J'ai examiné l'interface Python [os
][1], mais je n'ai pas trouvé de méthode pour déplacer un fichier. Comment faire l'équivalent de $ mv ...
en Python ?
>>> source_files = '/PATH/TO/FOLDER/*'
>>> destination_folder = 'PATH/TO/FOLDER'
>>> # equivalent of $ mv source_files destination_folder
[os.rename()
][1], [shutil.move()
][2], ou [os.replace()
][3].
Tous utilisent la même syntaxe :
import os
import shutil
os.rename("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
shutil.move("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
os.replace("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
Notez que vous devez inclure le nom du fichier (file.foo
) dans les arguments source et destination. S'il est modifié, le fichier sera renommé en plus d'être déplacé.
Notez également que dans les deux premiers cas, le répertoire dans lequel le nouveau fichier est créé doit déjà exister. Sous Windows, un fichier avec ce nom ne doit pas exister ou une exception sera levée, mais os.replace()
remplacera silencieusement un fichier même dans ce cas.
Comme il a été noté dans les commentaires d'autres réponses, shutil.move
appelle simplement os.rename
dans la plupart des cas. Cependant, si la destination est sur un disque différent de la source, il va plutôt copier et ensuite supprimer le fichier source.
[1] : http://docs.python.org/library/os.html#os.rename [2] : http://docs.python.org/library/shutil.html#shutil.move [3] : https://docs.python.org/library/os.html#os.replace
Bien que os.rename()
et shutil.move()
permettent tous deux de renommer des fichiers, la commande qui se rapproche le plus de la commande mv d'Unix est shutil.move()
. La différence est que os.rename()
ne fonctionne pas si la source et la destination sont sur des disques différents, alors que shutil.move()
ne se soucie pas du disque sur lequel se trouvent les fichiers.
Pour os.rename ou shutil.move, vous devrez importer le module. Aucun caractère * n'est nécessaire pour que tous les fichiers soient déplacés.
Nous avons un dossier dans /opt/awesome appelé source avec un fichier nommé awesome.txt.
in /opt/awesome
○ → ls
source
○ → ls source
awesome.txt
python
>>> source = '/opt/awesome/source'
>>> destination = '/opt/awesome/destination'
>>> import os
>>> os.rename(source, destination)
>>> os.listdir('/opt/awesome')
['destination']
Nous avons utilisé os.listdir pour voir que le nom du dossier a en fait changé. Voici le shutil déplaçant la destination vers la source.
>>> import shutil
>>> shutil.move(destination, source)
>>> os.listdir('/opt/awesome/source')
['awesome.txt']
Cette fois, j'ai vérifié dans le dossier source pour être sûr que le fichier awesome.txt que j'ai créé existe. Il y est :)
Nous avons maintenant déplacé un dossier et ses fichiers d'une source vers une destination et inversement.