能在Google App引擎上解压并查看内容吗 - Python?

2 投票
4 回答
2238 浏览
提问于 2025-04-17 10:30

我正在尝试通过XML和HTTP POST将大型CSV文件上传到GAE,使用的是压缩文件。

步骤如下:

  • 首先,把CSV文件压缩成zip格式,并进行Base64编码,然后通过XML/HTTP POST发送到GAE。

  • 在GAE这边,使用minidom来解析XML。

  • 接着,GAE会对ZIP文件进行Base64解码。

  • 最后,从解压后的ZIP文件中获取CSV文件。

我尝试使用zipfile库,但不知道如何从Base64解码后的字符串创建一个zipfile对象。

我遇到的错误是:TypeError: unbound method read() must be called with ZipFile instance as first argument (got str instance instead),意思是说read()这个方法需要一个ZipFile实例作为第一个参数,但我传入的是一个字符串。

myZipFile = base64.decodestring(base64ZipFile)

objZip = zipfile.ZipFile(myZipFile,'r')

strCSV = zipfile.ZipFile.read(objZip,'list.csv')

4 个回答

1

一个简单的方法是使用blob上传API将压缩的csv文件上传到blobstore,然后从那里处理这个zip文件。你需要模拟一个表单提交,但这样在appengine这边可能会让你的生活简单一些。

AppEngine MapReduce中有一个处理压缩数据的例子。可以看看BlobstoreZipInputReader这个类。

2

当然可以。实际上,我写了一篇博客文章,里面详细讲了怎么做到这一点

3

正如Rob提到的,ZipFile需要一个像文件一样的对象。你可以使用StringIO来给一个字符串提供一个类似文件的接口。

比如说:

import StringIO

myZipFile = base64.decodestring(base64ZipFile)

objZip = zipfile.ZipFile(StringIO.StringIO(myZipFile),'r')

撰写回答