2011-10-10 40 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的。

相關問題