3776 Stimmen

Wie kopiert man Dateien?

Wie kann ich eine Datei in Python kopieren?

23voto

Raymond Toh Punkte 786

shutil Modul bietet einige High-Level-Operationen auf files . Es unterstützt die Datei copying y removal .

Beachten Sie die Tabelle unten für Ihren Anwendungsfall.

Funktion

Nutzen Sie
Datei Objekt

Behalten Sie
Metadaten

Behalten Sie
Berechtigungen

Unterstützt
Verzeichnis Dest.

shutil.copyfileobj

shutil.copyfile

shutil.copy2

shutil.copy

22voto

Marc Punkte 3685

Ab dem Python 3.5 können Sie bei kleinen Dateien (z. B. Textdateien, kleine JPEGs) Folgendes tun:

from pathlib import Path

source = Path('../path/to/my/file.txt')
destination = Path('../path/where/i/want/to/store/it.txt')
destination.write_bytes(source.read_bytes())

write_bytes überschreibt alles, was sich am Zielort befand

4 Stimmen

Und dann verwendet jemand den Code (versehentlich oder absichtlich) in einer großen Datei Mit Funktionen aus shutil übernimmt alle Sonderfälle für Sie und gibt Ihnen Sicherheit.

11 Stimmen

Wenigstens werden nicht immer wieder die gleichen Lösungen verwendet.

20voto

mark Punkte 327

Sie könnten verwenden os.system('cp nameoffilegeneratedbyprogram /otherdirectory/')

oder wie ich es gemacht habe,

os.system('cp '+ rawfile + ' rawdata.dat')

wobei rawfile ist der Name, den ich im Programm generiert habe.

Dies ist eine reine Linux-Lösung

17 Stimmen

Dies ist nicht portabel und unnötig, da man einfach shutil verwenden kann.

6 Stimmen

Auch wenn shutil ist nicht verfügbar - subprocess.run() (ohne shell=True !) ist die bessere Alternative zu os.system() .

2 Stimmen

Shutil ist besser tragbar

14voto

Sundeep471 Punkte 1383
open(destination, 'wb').write(open(source, 'rb').read())

Öffnen Sie die Quelldatei im Lesemodus, und schreiben Sie in die Zieldatei im Schreibmodus.

3 Stimmen

Die Idee ist nett und der Code ist schön, aber eine richtige copy()-Funktion kann noch mehr, wie z.B. das Kopieren von Attributen (+x bit), oder z.B. das Löschen der bereits kopierten Bytes, wenn die Festplatte voll ist.

2 Stimmen

Alle Antworten müssen erklärt werden, auch wenn es nur ein Satz ist. Keine Erklärung ist ein schlechter Präzedenzfall und trägt nicht zum Verständnis des Programms bei. Was wäre, wenn ein absoluter Python-Neuling vorbeikommt und das Programm sehen und benutzen möchte, es aber nicht kann, weil er es nicht versteht? Sie wollen mit Ihren Antworten allen helfen.

3 Stimmen

Fehlt da nicht das .close() auf alle diese open(...) s?

13voto

deepdive Punkte 7699

Utilisez subprocess.call um die Datei zu kopieren

from subprocess import call
call("cp -p <file> <file>", shell=True)

22 Stimmen

Das hängt von der Plattform ab, daher würde ich es nicht verwenden.

10 Stimmen

Eine solche call ist unsicher. Bitte beziehen Sie sich auf die Dokumentation zu den Unterprozessen.

6 Stimmen

Dies ist nicht portabel und unnötig, da man einfach shutil verwenden kann.

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