zip 下载的 csv 文件
zip downloaded csv file
我正在尝试下载一个 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 文件的内容打印到标准输出并创建一个空的 zip 文件。
有什么地方可能出错的想法吗?
谢谢,
艾萨克
查看 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())
我正在尝试下载一个 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 文件的内容打印到标准输出并创建一个空的 zip 文件。
有什么地方可能出错的想法吗?
谢谢, 艾萨克
查看 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())