Ich habe mir die Python-os
-Schnittstelle angesehen, konnte aber keine Methode zum Verschieben einer Datei finden. Wie würde ich das Äquivalent zu $ mv ...
in Python machen?
>>> source_files = '/PATH/TO/FOLDER/*'
>>> destination_folder = 'PATH/TO/FOLDER'
>>> # equivalent of $ mv source_files destination_folder
os.rename()
, shutil.move()
, oder os.replace()
Alle verwenden die gleiche Syntax:
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")
Beachten Sie, dass Sie den Dateinamen (file.foo
) sowohl im Quell- als auch im Zielargument angeben müssen. Wenn er geändert wird, wird die Datei sowohl umbenannt als auch verschoben.
Beachten Sie auch, dass in den ersten beiden Fällen das Verzeichnis, in dem die neue Datei erstellt werden soll, bereits existieren muss. Unter Windows darf eine Datei mit diesem Namen nicht existieren oder es wird eine Ausnahme ausgelöst, aber os.replace()
ersetzt eine Datei auch in diesem Fall stillschweigend.
Wie in den Kommentaren zu anderen Antworten angemerkt wurde, ruft shutil.move
in den meisten Fällen einfach os.rename
auf. Befindet sich das Ziel jedoch auf einer anderen Festplatte als die Quelle, wird stattdessen die Quelldatei kopiert und dann gelöscht.
Obwohl os.rename()
und shutil.move()
beide Dateien umbenennen können, ist der Befehl, der dem Unix-Befehl mv am nächsten kommt, shutil.move()
. Der Unterschied ist, dass os.rename()
nicht funktioniert, wenn die Quelle und das Ziel auf verschiedenen Platten liegen, während shutil.move()
sich nicht darum kümmert, auf welcher Platte sich die Dateien befinden.
Entweder für os.rename oder shutil.move müssen Sie das Modul importieren. Um alle Dateien zu verschieben, ist kein *-Zeichen erforderlich.
Wir haben unter /opt/awesome einen Ordner namens source mit einer Datei namens 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']
Wir haben os.listdir verwendet, um zu sehen, dass sich der Ordnername tatsächlich geändert hat. Hier's das shutil, das das Ziel zurück zur Quelle verschiebt.
>>> import shutil
>>> shutil.move(destination, source)
>>> os.listdir('/opt/awesome/source')
['awesome.txt']
Diesmal habe ich im Quellordner überprüft, ob die von mir erstellte Datei awesome.txt existiert. Sie ist da :)
Jetzt haben wir einen Ordner und seine Dateien von einer Quelle zu einem Ziel und wieder zurück verschoben.