2016-03-18 16 views
0

Kredit zu geben, der Code, den ich zur Zeit mit arbeite ist von dieser Antwort von cji, here.Python Dateien verschieben Basierend auf dem Namen

Ich versuche, rekursiv alle Dateien aus dem Quellordner zu ziehen und sie bewegen ersten fünf Zeichen 0:5

Mein Code unten in Ordnern aus den Dateinamen:

import os 
import shutil 

srcpath = "SOURCE" 
srcfiles = os.listdir(srcpath) 

destpath = "DESTINATION" 

# extract the three letters from filenames and filter out duplicates 
destdirs = list(set([filename[0:5] for filename in srcfiles])) 


def create(dirname, destpath): 
    full_path = os.path.join(destpath, dirname) 
    os.mkdir(full_path) 
    return full_path 

def move(filename, dirpath): 
    shutil.move(os.path.join(srcpath, filename) 
       ,dirpath) 

# create destination directories and store their names along with full paths 
targets = [(folder, create(folder, destpath)) for folder in destdirs] 

for dirname, full_path in targets: 
    for filename in srcfiles: 
     if dirname == filename[0:5]: 
      move(filename, full_path) 

Nun ändert srcfiles = os.listdir(srcpath) und destdirs = list(set([filename[0:5] for filename in srcfiles]))mit dem Code unter bekomme ich die Pfade in einer Variablen und die ersten fünf Zeichen der Dateinamen in einem anderen.

srcfiles = [] 
destdirs = [] 

for root, subFolders, files in os.walk(srcpath): 
    for file in files: 
     srcfiles.append(os.path.join(root,file)) 
    for name in files: 
     destdirs.append(list(set([name[0:5] for file in srcfiles]))) 

Wie würde ich mich über den ursprünglichen Code zu modifizieren, diese zu verwenden ... Oder wenn jemand eine bessere Idee, wie ich über das tun dies gehen würde. Vielen Dank.

Antwort

0

Ich kann es nicht wirklich testen sehr einfach, aber ich denke, dieser Code funktionieren sollte:

import os 
import shutil 

srcpath = "SOURCE" 
destpath = "DESTINATION" 

for root, subFolders, files in os.walk(srcpath): 
    for file in files: 
     subFolder = os.path.join(destpath, file[:5]) 
     if not os.path.isdir(subFolder): 
      os.makedirs(subFolder) 
     shutil.move(os.path.join(root, file), subFolder) 
+1

Vielen Dank für die Antwort! 'os.path.mkdir (subFolder):' funktionierte nicht für mich. Ich musste den Pfad entfernen. Mit: 'os.makedirs (subFolder)' – sdavis891

+0

Sorry, ich habe meine Antwort bearbeitet. Die 'mkdir'- und' makedirs'-Funktionen befinden sich im 'os'-Modul, nicht im' os.path'-Submodul. 'mkdir' sollte funktionieren, außer die Unterordner sind mehr als eine Ebene verschachtelt. – tjohnson

+0

wenn ich, sagen wir in der Zukunft, mit den Unterordnern arbeiten wollte ... wäre das eine einfache Anpassung? Sagen wir, ich hätte eine Datei namens 045679.jpg, ich möchte, dass sie in einen 0 Ordner> 045 Ordner> 04567 Ordner oder so ähnlich ablegt. – sdavis891

Verwandte Themen