我尝试下载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。
任何可能出错的想法?
谢谢, 艾萨克
答案 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())