Python: 如何正确处理gzipped json?

3 投票
3 回答
3154 浏览
提问于 2025-04-17 04:02

我找到了一段代码,感觉它可以解决问题,但我不太明白为什么要用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/

urlliburllib2的文件对象没有提供一个叫tell()的方法,而这个方法是gzip需要的。

撰写回答