zip已下载csv文件

时间:2016-01-18 10:19:04

标签: python csv zip

我尝试下载csv文件并在保存之前将其压缩。 我使用的代码是:

req = urllib2.Request(url)
fh = urllib2.urlopen(req)
with contextlib.closing(ZipFile("test.csv.zip", "w", zipfile.ZIP_STORED)) as f:
    f.write(fh.read())
    f.close()

这样做是为了将csv文件的内容打印到stdout并创建一个空的zipfile。

任何可能出错的想法?​​

谢谢, 艾萨克

1 个答案:

答案 0 :(得分:2)

查看ZipFile.write()的文档。这是函数签名:

ZipFile.write(filename[, arcname[, compress_type]])

第一个参数应该是您要添加到zip存档的文件的文件名,而不是文件的内容。相反,您将下载资源的全部内容作为文件名传递,因为这可能是非法的(太长),您会看到文件内容被转储为引发异常的错误消息的一部分。

要解决此问题,您需要使用ZipFile.writestr()

req = urllib2.Request(url)
fh = urllib2.urlopen(req)
with ZipFile("test.csv.zip", "w", zipfile.ZIP_STORED) as f:
    f.writestr('test.csv', fh.read())

如果您打算只压缩单个文件,则可能不需要使用zip存档,最好使用gzipbzip2