2016-03-18 23 views
0

Based On, Şu anda ile çalışıyorum kod here.Python Taşı Dosyalar kredi vermek için adı

ben yinelemeli kaynak klasördeki tüm dosyaları çekmeye çalışan ve bunları taşımak am, CJI bu yanıttan olduğunu dosya adlarından klasörler ilk beş karakter 0:5 içine Aşağıda

Benim Kod: Şimdi

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) 

, srcfiles = os.listdir(srcpath) vedeğişen'un altındaki kodla birlikte, bir değişkendeki yolları ve dosya adlarının ilk beş karakterini diğerinde alır.

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]))) 

nasıl ... Bu kullanmayı orijinal kodu değiştirmeyle ilgili gider Veya eğer birisi bunu hakkında gitmek nasıl daha iyi bir fikri vardır. Teşekkürler.

cevap

0

Gerçekten çok kolay test edemez, ama bu kod çalışması gerekir düşünüyorum: cevap için

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

Teşekkür! 'os.path.mkdir (subFolder):' benim için çalışmadı. Yolu kaldırmak zorundaydım. Kullanımı: 'os.makedirs (subFolder)' – sdavis891

+0

Bunun için üzgünüm, cevabımı düzenledim. 'Mkdir' ve' makedir'' işlevleri 'os.path' alt modülü değil, 'os' modülündedir. Alt klasörler birden fazla seviyede yuvalanmadıkça 'mkdir' çalışmalıdır. – tjohnson

+0

Gelecekte alt klasörlerle detaylandırmak istediğimde, kolay bir kişiselleştirme mi? Yani 045679.jpg adlı bir dosyam olduğunu söyle, 0 Klasör> 045 Klasör> 04567 Klasöre veya bir şeye atılmasını istiyorum. – sdavis891