2012-10-09 18 views
5

Başlığı yeni bir hatadan kapatıyormuş gibi davranıyor ve yeni bir kullanıcı değilim. Bir 3.5G bilinen 'train.zip' bir 3.5G dosyası 'train.csv' içeriyor. Zip dosyasını açın ve herhangi bir istisna olmadan dosyayı açın (LargeZipFile), ancak ortaya çıkan filestream boş görünüyor. (UNIX 'unzip -c ...' iyi olduğunu doğruladı) ZipFile.open() tarafından döndürülen dosya nesneleri aranabilir veya söylenemez, bu yüzden bunu kontrol edemiyorum.Açılış desteklenmeyen sıkıştırma türünün zip dosyası sessizce boş filestream yerine,

Python dağılımı 2.7.3 EPD'siz 7.3-1 (32 bit); ama büyük fermuarlar için iyi olmalı. OS nedeni birleşimidir MacOS 10.6.6

import csv 
import zipfile as zf 

zip_pathname = os.path.join('/my/data/path/.../', 'train.zip') 
#with zf.ZipFile(zip_pathname).open('train.csv') as z: 
z = zf.ZipFile(zip_pathname, 'r', zf.ZIP_DEFLATED, allowZip64=True) # I tried all permutations 
z.debug = 1 
z.testzip() # zipfile integrity is ok 

z1 = z.open('train.csv', 'r') # our file keeps coming up empty? 

# Check the info to confirm z1 is indeed a valid 3.5Gb file... 
z1i = z.getinfo(file_name) 
for att in ('filename', 'file_size', 'compress_size', 'compress_type', 'date_time', 'CRC', 'comment'): 
    print '%s:\t' % att, getattr(z1i,att) 
# ... and it looks ok. compress_type = 9 ok? 
#filename: train.csv 
#file_size: 3729150126 
#compress_size: 1284613649 
#compress_type: 9 
#date_time: (2012, 8, 20, 15, 30, 4) 
#CRC: 1679210291 

# All attempts to read z1 come up empty?! 
# z1.readline() gives '' 
# z1.readlines() gives [] 
# z1.read() takes ~60sec but also returns '' ? 

# code I would want to run is: 
reader = csv.reader(z1) 
header = reader.next() 
return reader 

cevap

11

geçerli:

  • bu dosyanın sıkıştırma türüdür tipi 9: Deflate64/Deflate (PKWare en berbat tescilli biçimi) Enhanced
  • ve Bir zipfile hata: desteklenmeyen sıkıştırma türleri için bir istisna oluşturmayacaktır. Sadece silently return a bad file object [Bölüm 4.4.5 sıkıştırma yöntemi] için kullanılır. Aargh. Ne kadar alçakgönüllü. Bu hatayı dosyaladım ve sıkıştırma tipi bilinmiyorsa, şimdi NotImplementedError'ı yükseltir. Sönmüş:

bir komut satırı Çözüm düz tip 8 elde etmek için, daha sonra rezip, halletmek etmektir.

zipfile will throw an exception in 2.7,3.2+ Zip dosyası hiçbir zaman yasal nedenlerden dolayı tip 9'u kullanamayacaktır. Python doc train.csv küçük olduğunda çalışır mı? O zipfile hiçbir söz handle other compression types :(

+0

sıkıştırma türünü nasıl kontrol edileceğini biliyoruz, bu yüzden sessiz başarısızlık tahmin edebilirsiniz –

+0

@MartinTaleski:? Ben bir hata açtı, onu çözüldü ve sıkıştırma türü bilinmediğinde, şimdi NotImplementedError'ı yükseltir.Yalnızca "yakalama" deneyebilirsiniz, EAFP felsefesi – smci

1

piton bellek ayıklamak için dosya çok büyük mümkün mü edemez hale getirir?

You burada gösterilen birine benzer bir yöntemi kullanarak okumayı deneyebilirsiniz: How do you unzip very large files in python?

+0

Si ze sorun değil. Sorunu burada yazdım (desteklenmeyen sıkıştırma türü + zip dosyası, Özel Durum'u atlamıyor ve hatalı dosya nesnesini sessizce döndürüyor). Ne saçmalık. – smci

İlgili konular