gpt4 book ai didi

python - 打开不受支持的压缩类型的 zipfile 静默返回空文件流,而不是抛出异常

转载 作者:太空狗 更新时间:2023-10-29 20:11:24 26 4
gpt4 key购买 nike

新手错误似乎让我大吃一惊,我不是新手。我有一个 1.2G 的已知良好压缩文件 'train.zip',其中包含一个 3.5G 的文件 'train.csv'。我打开 zip 文件并自行归档,没有任何异常(没有 LargeZipFile),但生成的文件流似乎是空的。 (UNIX 'unzip -c ...' 确认它是好的)Python ZipFile.open() 返回的文件对象不可搜索或可辨别,因此我无法检查。

Python 发行版是 2.7.3 EPD-free 7.3-1(32 位);但对于大 zipper 应该没问题。操作系统为 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

最佳答案

原因是以下因素的结合:

  • 此文件的压缩类型是类型 9:Deflate64/Enhanced Deflate(PKWare 的专有格式,与更常见的类型 8 相对)
  • 和一个zipfile错误:它不会为不受支持的压缩类型抛出异常。它曾经只是silently return a bad file object [第 4.4.5 节压缩方法]。啊。多么虚假。更新:我提交了bug 14313它在 2012 年得到修复,因此当压缩类型未知时它现在会引发 NotImplementedError。

命令行解决方法是解压缩,然后重新压缩,以获得普通的type 8: Deflated

zipfile will throw an exception in 2.7 , 3.2+出于法律原因,我猜 zipfile 永远无法真正处理类型 9。Python 文档没有提及 zipfile 不能 handle other compression types :(

关于python - 打开不受支持的压缩类型的 zipfile 静默返回空文件流,而不是抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12809651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com