Python: 如何正确处理gzipped json?
我找到了一段代码,感觉它可以解决问题,但我不太明白为什么要用StringIO。难道f
已经是一个像文件一样的对象了吗?为什么还要先读取它,然后再把它变成一个文件的样子,再读取一次呢?我测试过这段代码(其实是稍微修改过的版本),没有StringIO的话是不能工作的。
3 个回答
0
我理解代码的相关部分是这样的:
- 打开一个网址
- 把这个网址的内容全部下载到内存中(使用
read
方法) - 把下载的内容存储在一个StringIO对象里,这样它就像一个文件一样可以使用
- 然后对这些内容进行gzip压缩和json处理。
1
可能是gunzip的代码需要一个像文件一样的对象,而这个对象需要有一个seek
方法,但HTTP库一般不会提供这个方法。那么“不能工作”具体指什么呢?是出现了错误信息吗?
如果你真正关心的是效率,可以稍微修改一下代码,使用cStringIO,而不是StringIO。
1
看起来在Python的标准库里有个问题,这个问题在Python 3.2版本中已经修复了。
可以查看这个链接了解更多信息:http://www.enricozini.org/2011/cazzeggio/python-gzip/
urllib
和urllib2
的文件对象没有提供一个叫tell()
的方法,而这个方法是gzip需要的。