能在Google App引擎上解压并查看内容吗 - Python?
我正在尝试通过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')