Python scheint Funktionen zum Kopieren von Dateien (z. B. shutil.copy
) und Funktionen zum Kopieren von Verzeichnissen (z. B. shutil.copytree
) zu haben, aber ich habe keine Funktion gefunden, die beide unterstützt. Sicher, es ist trivial zu überprüfen, ob Sie eine Datei oder ein Verzeichnis kopieren möchten, aber es scheint eine seltsame Auslassung zu sein.
Gibt es wirklich keine Standardfunktion, die wie das Unix funktioniert? cp -r
Befehl , dh sowohl Verzeichnisse als auch Dateien unterstützt und rekursiv kopiert? Was wäre die eleganteste Art, dieses Problem in Python zu umgehen?
copytree
einreichen , um das Kopieren einer einzelnen Datei zu ermöglichen?Antworten:
Ich schlage vor, Sie rufen zuerst an
shutil.copytree
, und wenn eine Ausnahme ausgelöst wird, versuchen Sie es erneut mitshutil.copy
.quelle
shutil.copytree
Funktion daran, beide Fälle in Zukunft zu verbessern und zu verwalten. 4) Ausnahmen sind in Python nicht so außergewöhnlich. Beispiel: Eine Iteration wird gestoppt, indem eine StopIteration-Ausnahme ausgelöst wird.Um die Antworten von Tzot und gns hinzuzufügen , haben Sie eine alternative Möglichkeit, Dateien und Ordner rekursiv zu kopieren. (Python 3.X)
Sollte es Ihr erstes Mal sein und Sie keine Ahnung haben, wie Sie Dateien und Ordner rekursiv kopieren können, hoffe ich, dass dies hilft.
quelle
shutil.copy
undshutil.copy2
werden das Kopieren von Dateien.shutil.copytree
kopiert einen Ordner mit allen Dateien und allen Unterordnern.shutil.copytree
benutztshutil.copy2
um die Dateien zu kopieren.So ist der Analog
cp -r
Sie sagen das ist ,shutil.copytree
weilcp -r
Ziele und kopiert einen Ordner und seine Dateien / Unterordner möchtenshutil.copytree
. Ohne die-r
cp
Kopien mögen Dateienshutil.copy
undshutil.copy2
tun.quelle
shutil.copytree('C:\myfile.txt', 'C:\otherfile')
. Es funktioniert nicht. Darum hat das OP vor 7 Jahren gebeten.Unix
cp
unterstützt nicht sowohl Verzeichnisse als auch Dateien:Damit cp ein Verzeichnis kopiert, müssen Sie cp mithilfe des Flags '-r' manuell mitteilen, dass es sich um ein Verzeichnis handelt.
Hier gibt es jedoch einige Unterbrechungen -
cp -r
wenn ein Dateiname übergeben wird, kopiert die Quelle nur die einzelne Datei. Copytree wird nicht.quelle
Ich denke, copy_tree ist das, wonach Sie suchen
quelle
Die Python Shutil.copytree Methode ist ein Chaos. Ich habe eine gemacht, die richtig funktioniert:
quelle