2011-08-10 22 views
10

Şu an yaklaşık 3 hafta boyunca python öğreniyorum ve şu anda dosya adı (yaklaşık 10.000) anahtar sözcüklere ve dosya adında görünen tarihe göre küçük bir komut dosyası yazmaya çalışıyorum. Belli bir tarihten önce dosyalar bir arşive eklenmelidir. Sıralama iyi çalışıyor, ancak arşivleme değilPython: Dizin olmadan dosyaları bir arşive mi aldınız?

Bir arşiv oluşturuyor - ad güzel - ancak arşivdeki dosyaların tam yolu. Eğer açarsam, şöyle görünür: folder1 -> folder2 -> folder3 -> files.

Arşivi, yalnızca yapının değil, yalnızca dosyaları içerecek şekilde nasıl değiştirebilirim? Aşağıda

benim zip fonksiyonu ile snippet'idir, node dosya tasnif önce olduğu yoludur, folder adına bir anahtar kelime tarafından sıralanmış dosyaları ile bir alt klasörü, items tarihe göre sıralanmış dosyalarla klasörler vardır. Ben Python 2,6

def ZipFolder(node, zipdate): 
    xynode = node + '/xy' 
    yznode = node + '/yz' 
    for folder in [xynode,yznode]: 
     items = os.listdir(folder) 
     for item in items: 
      itemdate = re.findall('(?<=_)\d\d\d\d-\d\d', item) 
      print item 
      if itemdate[0] <= zipdate: 
       arcname = str(item) + '.zip' 
       x = zipfile.ZipFile(folder + '/' + arcname, mode='w', compression = zipfile.ZIP_DEFLATED) 
       files = os.listdir(folder + '/' + item) 
       for f in files: 
        x.write(folder + '/' + item + '/' + f) 
        print 'writing ' + str(folder + '/' + item + '/' + f) + ' in ' + str(item) 
       x.close() 
       shutil.rmtree(folder + '/' + item) 
    return 

kullanıyorum

Ben de herhangi bir öneri ve iyileştirmelere açığım. yardım itibaren

cevap

13

(zip dosyası):

| write(self, filename, arcname=None, compress_type=None) 
|  Put the bytes from filename into the archive under the name 
|  arcname. 

Yani diyoruz) sizin yazma (değiştirmeyi deneyin ile: Kodunuzdaki Hakkında

x.write(folder + '/' + item + '/' + f, arcname = f) 

, özellikle bir 3 hafta boyunca, bana yeterince iyi görünüyor pythonist, bir kaç yorum memnuniyetle karşılanacaktır ;-)

+0

Yorum yok ama docstring. Fonksiyonun ne işe yaradığını ve ne işe yaradığını açıklayın, nasıl çalıştığını ve dokumanın bunun için en yararlı olduğunu açıklayın. –

+0

Harika çalışıyor, hızlı yardım için teşekkürler. – rny

+0

@Jan Hudec: def ZipFolder (düğüm, zipdate) : docstringe ile böyle sth demek "" " " 'düğüm' alt klasörlerine 'zipdate' daha eski dosyaları fermuarlar"" – rny

İlgili konular