18 Stimmen

Wie man alle Dateien aus einem Ordner kopiert (einschließlich Unterordner), ohne die Ordnerstruktur in Python zu kopieren

Kann mir jemand helfen, wie man alle Dateien aus einem Ordner in einen anderen Zielordner in Python kopiert? Der Clou dabei ist, dass ich die Unterverzeichnisstruktur nicht kopieren möchte. Aber ich möchte die Dateien darin haben.

Zum Beispiel, nehmen wir an, im Stammverzeichnis gibt es 3 Ordner, die jeweils 10 Dateien enthalten. Außerdem gibt es in jedem von ihnen 2 Ordner mit jeweils 5 Dateien. (also hat jeder Ordner der ersten Ebene insgesamt 20 Dateien und 2 Unterverzeichnisse darunter). Das bringt die Gesamtzahl auf 60 Dateien.

Ich möchte alle diese 60 Dateien in ein einzelnes Zielverzeichnis kopieren, ohne die Unterordnerstruktur beizubehalten.

Dies ist der Code, den ich versucht habe:

# path: Quellordnerpfad
# compiled_path: Zielordnerpfad
w = os.walk(path)
for root, dirs, files in w:
    for dir_name in dirs:
        file_list_curent_dir = os.walk(path+"\\"+dir_name).next()[2]
        for item in file_list_curent_dir:
            shutil.copy(path+"\\"+dir_name+"\\"+item, compiled_path+"\\"+item )

Es kopiert die Dateien auf oberster Ebene, nicht die Ordner innerhalb der Unterverzeichnisse.

Vielen Dank für Ihre Zeit.

31voto

J'e Punkte 1794
import os
import shutil

for root, dirs, files in os.walk('.'):  # Ersetzen Sie den Punkt durch Ihr Startverzeichnis
   for file in files:
      path_file = os.path.join(root,file)
      shutil.copy2(path_file,'zielverzeichnis') # Ändern Sie Ihr Zielverzeichnis

0voto

Mbjahnoon Punkte 31

Sie können diese Rohfunktion verwenden (aber der beste Weg, wenn Sie rekursiv über Verzeichnisse gehen wollen, ist os.walk)

from shutil import copyfile
import shutil
def deine_funktion(dir):
    for ordner in os.listdir(dir):
        ordner_voll_path = os.path.join(dir,ordner)
        nach_unten_bewegen_und_löschen(ordner_voll_path,ordner_voll_path)

def nach_unten_bewegen_und_löschen(eingabe,kopieren_nach_verz):
    if os.path.isfile(eingabe):
        ziel = os.path.join(kopieren_nach_verz,os.path.basename(eingabe))
        print ziel,eingabe
        copyfile(eingabe,ziel)
        return
    for kind in os.listdir(eingabe):
         aktuelles_objekt_pfad = os.path.join(eingabe, kind)
         nach_unten_bewegen_und_löschen(aktuelles_objekt_pfad,kopieren_nach_verz)
         if not os.path.isfile(aktuelles_objekt_pfad): shutil.rmtree(aktuelles_objekt_pfad)

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