1350 Stimmen

Wie man eine Datei in Python verschiebt?

Wie würde ich das Äquivalent von mv src/* dest/ in Python machen?

>>> source_files = '/PFAD/ZU/ORDNER/*'
>>> destination_folder = 'PFAD/ZU/ORDNER'
>>> # Äquivalent zu $ mv source_files destination_folder

16voto

Javier Palacios Punkte 320

Die akzeptierte Antwort ist nicht die richtige, da es bei der Frage nicht darum geht, eine Datei in eine Datei umzubenennen, sondern viele Dateien in ein Verzeichnis zu verschieben. shutil.move wird die Arbeit erledigen, aber für diesen Zweck ist os.rename nutzlos (wie in den Kommentaren angegeben), da das Ziel einen expliziten Dateinamen haben muss.

3voto

Muhammedogz Punkte 745

Auch möglich mit der Verwendung der Methode subprocess.run().

python:
>>> import subprocess
>>> neu = "/Pfad/zum/Ziel"
>>> alt = "/Pfad/zum/neuen/Ziel"
>>> prozess = "mv ..{} ..{}".format(alt, neu)
>>> subprocess.run(prozess, shell=True) # erinnern Sie sich nicht, weisen Sie den Wert shell zu True zu.

Dies funktioniert einwandfrei bei der Arbeit unter Linux. Unter Windows tritt wahrscheinlich ein Fehler auf, da es kein mv-Befehl gibt.

3voto

Diego Punkte 643

Da Ihnen der Rückgabewert egal ist, können Sie Folgendes tun

import os
os.system("mv src/* dest/")

2voto

Bill Punkte 8047

Basierend auf der Antwort hier beschrieben, ist die Verwendung von subprocess eine weitere Option.

So etwas wie das:

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

Ich bin neugierig auf die Vor- und Nachteile dieser Methode im Vergleich zu shutil. Da ich in meinem Fall bereits aus anderen Gründen subprocess verwende und es zu funktionieren scheint, tendiere ich dazu, dabei zu bleiben.

Dies hängt von der Shell ab, in der Sie Ihr Skript ausführen. Der mv -Befehl gilt für die meisten Linux- Shells (bash, sh usw.), funktioniert jedoch auch in einem Terminal wie Git Bash unter Windows. Für andere Terminals müssen Sie mv in einen alternativen Befehl ändern.

0voto

alper Punkte 2227

Dies ist eine Lösung, die das shell nicht mit mv aktiviert.

from subprocess import Popen, PIPE, STDOUT

quelle = "Pfad/zur/aktuellen/datei.foo",
ziel = "Pfad/zum/neuen/ziel/für/datei.foo"

p = Popen(["mv", "-v", quelle, ziel], stdout=PIPE, stderr=STDOUT)
ausgabe, _ = p.communicate()
ausgabe = ausgabe.strip().decode("utf-8")
if p.returncode:
    print(f"E: {ausgabe}")
else:
    print(ausgabe)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X