2017-01-31 3 views
0

def copy_excel():Python - Wie Ordnererstellung behandeln, wenn Ordner bereits vorhanden ist

srcpath = "C:\\Aloha"   #where the excel files are located 
    srcfiles = os.listdir(srcpath) #sets srcfiles as list of file names in the source path folder 
    destpath = "C:\\"    #destination where the folders will be created 
    destdir = list(set([filename[19:22] for filename in srcfiles])) #extract three digits from filename to use for folder creation (i.e 505, 508, 517,...) 

    #function to handle folder creation 
    def create(dirname, destpath): 
      full_path = os.path.join(destpath, dirname) 
      if os.path.exists(full_path): 
        pass 
      else: 
        os.mkdir(full_path) 
      return full_path 

    #function to handle moving files to appropriate folders 
    def move(filename, dirpath): 
      shutil.move(os.path.join(srcpath, filename), dirpath) 

    #creates the folders with three digits as folder name by calling the create function above 
    targets = [(folder, create(folder, destpath)) for folder in destdir] 
    #handles moving files to appropriate folders if the three digits in file name matches the created folder 
    for dirname, full_path in targets: 
      for filename in srcfiles: 
        if dirname == filename[19:22]: 
          move(filename, full_path) 
        else: 
          pass 

Ich bin etwas Neues zu Python so tragen Sie bitte mit mir! Ich konnte diesen Codeblock auf dieser Seite finden und an meinen speziellen Anwendungsfall anpassen. Der Code funktioniert gut zum Erstellen der angegebenen Ordner und zum Löschen der Dateien in die entsprechenden Ordner. Wenn ich den Code erneut für neue Dateien ausführen, die in der "C:\\Aloha" abgelegt werden, erhalte ich eine Error 183: Cannot create a file when that file already exists. In diesem Fall existiert der Ordner bereits, da es zuvor erstellt wurde, als das Skript zum ersten Mal ausgeführt wurde.

Der Code ist fehlerhaft, wenn Ziele versuchen, bereits vorhandene Ordner zu erstellen. Meine Frage ist, was ist die Logik, um bereits existierende Ordner zu behandeln und den Fehler zu ignorieren und die Dateien einfach in die entsprechenden Ordner zu verschieben? Das Skript sollte nur Ordner erstellen, wenn sie nicht bereits vorhanden sind.

Jede Hilfe würde sehr geschätzt werden! Ich habe try/except und nesting if/else Anweisungen sowie os.path.isdir(path) versucht, um zu sehen, ob das Verzeichnis existiert, aber ich hatte kein Glück. Ich entschuldige mich für einige der falschen Kommentare, ich lerne immer noch Python-Logik, während ich dieses Skript ausbilde.

+0

'os.path.exists', um einen' try/except' Block zu prüfen und zu verwenden, um fortzufahren, wenn der Fehler ausgelöst wurde. –

Antwort

4

könnten Sie os.mkdirs verwenden, die nicht nur Kaskadierung Verzeichnisse so schaffen, dass zum Beispiel C:\foo\bar\quxfoo schaffen, bar und qux, falls sie nicht existieren, aber Sie können auch die exist_ok=True so eingestellt, dass kein Fehler Wird ausgelöst, wenn das Verzeichnis existiert. So

:

os.mkdirs(full_path,exist_ok=True) 
+0

Vielen Dank für die Antwort! Ist das das gleiche, wenn os.path.exists (full_path): pass? Ich benutze Python 2.7.8 (ich weiß, ältere Version), was bedeutet, dass ich den Parameter exist_ok = True nicht verwenden kann. Ich habe den Code für meine Zwecke zu arbeiten, aber am Ende musste Derlins Antwort verwenden –

+0

nicht 'pass':' wenn nicht os.path.exists (full_path): os.mkdir (full_path) '(mit' nicht') und eigentlich nein. Es ist immer noch nicht vollständig gleichwertig wegen der Kaskade. Außerdem würde ich Python-3.x eigentlich nicht als * echten * Nachfolger von Python-2.7 betrachten: Beide Sprachen unterscheiden sich in so vielen Aspekten, dass sie - von manchen - als unterschiedliche Sprachen betrachtet werden. –

1

Falls Sie einen Fehler werfen oder die Verarbeitung zu stoppen, wenn das Verzeichnis vorhanden ist, Sie os.path.exists(full_path) vor mkdir verwenden können.

+0

os.path.exist (vollständiger_Pfad) erzwingt das Überschreiben vorheriger Ordner mit demselben Namen –

Verwandte Themen