2011-10-10 139 views
3

我发现this snippet,这似乎做的工作,但我不明白为什么它使用StringIO的。是不是f已经是一个文件类对象?有什么需要阅读它,然后再使它看起来像一个文件,只能再次阅读它?我已经测试了它(好吧,它的一个稍微修改过的版本),没有StringIO就无法工作。Python:处理gzip json的正确方法是什么?

+1

您具体是如何“稍微修改”的代码? – pvoosten

+0

这就是为什么我使用'httplib2' - http://code.google.com/p/httplib2 – Anders

回答

1

似乎是python标准库中的一个缺陷,它在Python 3.2中修复。
看到http://www.enricozini.org/2011/cazzeggio/python-gzip/

urlliburllib2文件对象不提供一种方法,通过tell()的gzip的要求。

+0

谢谢!很棒的发现。我有一天会迁移到python 3.x :) –

0

就我阅读代码的相关部分说:

  • 打开一个URL
  • 完全下载到内存中(与read法)
  • 存放在StringIO对象的内容,因此,它是可以作为一个类文件对象
  • 执行gzip和JSON的东西吧。
1

这有可能是gunzip解代码需要具有seek方法,其中一个HTTP库是不太可能提供一个类似文件的对象。 “不起作用”是什么意思?错误信息?

如果效率是你真正关心的,稍微修改代码,以便它使用cStringIO,不StringIO的。

相关问题