Question Comment déplacer un fichier en Python


J'ai regardé dans le python os interface, mais n'a pas pu trouver une méthode pour déplacer un fichier. Comment ferais-je l'équivalent de $ mv ... en Python?

>>> source_files = '/PATH/TO/FOLDER/*'
>>> destination_folder = 'PATH/TO/FOLDER'
>>> # equivalent of $ mv source_files destination_folder

532
2018-01-13 22:17


origine


Réponses:


os.rename() ou shutil.move()

Les deux 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")

Notez que dans les deux cas, le répertoire dans lequel le nouveau fichier est créé doit déjà exister (mais sous Windows, un fichier portant ce nom ne doit pas exister ou une exception sera déclenchée). Notez également que vous devez inclure le nom du fichier (file.foo) dans les arguments source et destination. Si elle est modifiée, le fichier sera renommé et déplacé.

Comme cela a été noté dans les commentaires sur d'autres réponses, shutil.move simplement des appels os.rename dans la plupart des cas. Toutefois, si la destination se trouve sur un disque différent de celui de la source, elle copie à la place et supprime le fichier source.


774
2018-01-13 22:19



Bien que os.rename() et shutil.move() les deux renommer les fichiers, la commande la plus proche de la commande mv 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 les fichiers sont.


190
2018-05-30 21:12



Pour le fichier os.rename ou shutil.move, vous devrez importer le module. Aucun caractère n'est nécessaire pour déplacer tous les fichiers.

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 effectivement changé. Voici le dispositif qui ramène la destination à 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. C'est là :)

Maintenant, nous avons déplacé un dossier et ses fichiers d'une source à une destination et vice-versa.


30
2018-02-22 02:30



La réponse acceptée n'est pas la bonne, car la question n'est pas de renommer un fichier dans un fichier, mais de déplacer plusieurs fichiers dans un répertoire. shutil.move fera le travail, mais à cette fin os.rename est inutile (comme indiqué sur les commentaires) car la destination doit avoir un nom de fichier explicite.


8
2017-10-17 14:23



C'est ce que j'utilise en ce moment:

import os, shutil
path = "/volume1/Users/Transfer/"
moveto = "/volume1/Users/Drive_Transfer/"
files = os.listdir(path)
files.sort()
for f in files:
    src = path+f
    dst = moveto+f
    shutil.move(src,dst)

Maintenant entièrement fonctionnel. J'espère que cela vous aide.


8
2017-11-12 19:02



  import os,shutil

  current_path = "" ## source path

  new_path = "" ## destination path

  os.chdir(current_path)

  for files in os.listdir():

        os.rename(files, new_path+'{}'.format(f))
        shutil.move(files, new_path+'{}'.format(f)) ## to move files from 

disque différent ex. C: -> D:


0
2018-05-07 12:06



Basé sur la réponse décrit ici, en utilisant subprocess est une autre option.

Quelque chose comme ça:

subprocess.call("mv %s %s" % (source_files, destination_folder), shell=True)

Je suis curieux de connaître les avantages et les inconvénients de cette méthode par rapport à shutil. Puisque dans mon cas je suis déjà en train d'utiliser subprocess pour d'autres raisons et cela semble fonctionner, je suis enclin à m'en tenir à cela.

Est-ce que cela dépend du système?


0
2018-06-16 01:50