2011-08-02 13 views
9

Bu kodu klasörleri ve dosyaları sıkıştırmak için çalıştırıyorum.Python - dosyaları sıkıştırırken hata, 'L' biçimi gerektirir 0 <= number <= 4294967295

/[Wii]TrackMania[PAL][WiiSOS.com]/ws_tramap.iso 

Herhangi bir fikir bunu nasıl düzeltebilirim: Böyle dosya üzerinde

'L' format requires 0 <= number <= 4294967295 

Örnek:

def save_folder_as_zip(self, folder_to_zip, save_as): 
    zipf = zipfile.ZipFile(str(save_as), mode="w", allowZip64=True) 
    self.create_zip(zipf, folder_to_zip) 
    zipf.close() 

    return zipf 

def create_zip(self, zipf, directory, folder=""): 

    directory = directory.encode("utf-8") 

    for item in os.listdir(directory): 
     if temp_folder == directory + os.sep: 
      continue 

     try: 
      if os.path.isfile(os.path.join(directory, item)): 
       zipf.write(os.path.join(directory, item), folder + os.sep + item) 
      elif os.path.isdir(os.path.join(directory, item)): 
       self.create_zip(zipf, os.path.join(directory, item).decode("utf-8"), folder + os.sep + item) 
     except Exception, e: 
      self.schedule.machine.log_warning(str(e)) 

Ama sonra bu hata alıyorum?

traceback:

Traceback (most recent call last): 
File "test.py", line 29, in <module> 
    save_folder_as_zip("/Users/f/Downloads/", "hei.zip") 
File "test.py", line 13, in save_folder_as_zip 
    create_zip(zipf, folder_to_zip) 
File "test.py", line 26, in create_zip 
    create_zip(zipf, os.path.join(directory, item).decode("utf-8"), folder + os.sep + item) 
File "test.py", line 24, in create_zip 
    zipf.write(os.path.join(directory, item), folder + os.sep + item) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 1100, in write 
    zinfo.file_size)) 
struct.error: 'L' format requires 0 <= number <= 4294967295 
+0

Hata hangi satırı tetikler? –

+2

Dosyanız 4GB'den büyük mü? Ve lütfen tüm geri izlemeyi yapıştırın. –

+0

Sıkıştırma dizini toplam 6 GB'dir, ancak örnekte dosya 1 GB civarındadır. – Aola

cevap

2

Ben bu hata raporuna ekli yama uygulayarak düzeltilebilir düşünüyorum:

http://bugs.python.org/issue9720

sorun dosyası dahil etmek çalışırken ortaya çıkar zip dosyası, orijinal veya sıkıştırılmış formda 2^32-1 bayttan daha büyüktür. Bu senaryoda, kütüphanenin -1 dosya boyutu/sıkıştırılmış boyut olarak saklanması ve 32 bitlik bir dword'a sığmayan gerçek boyutu saklamak için bazı ek alanlar ayırması gerekir.

Bazı nedenlerden dolayı yama, 3.2 veya 2.7.2+ olarak kabul edilmedi, ancak test ettim ve Tamam çalışıyor. Ben writestr() yöntemi ile bazı köşe durum düzeltmez düşünüyorum, ancak dosyaları depolamak için sadece write() kullanırsanız, harika çalışır.

İlgili konular