我遇到了Python的问题。
我的情况:我是来自合作伙伴平台的gzip压缩文件(即h..p // .... namesite ... / xxx) 如果我点击浏览器中的链接,它将下载一个文件(例如namefile.xml.gz)。
所以......如果我用python读取这个文件,我可以解压缩并阅读它。
代码:
content = gzip.open(namefile.xml.gz,'rb')
print content.read()
但是如果我尝试从远程源读取文件,我就不能。 从远程文件我只能读取编码的字符串,但不能解码它。
代码:
response = urllib2.urlopen(url)
encoded =response.read()
print encoded
使用此代码我可以读取编码的字符串...但我无法用gzip或lzip解码它。
有什么建议吗? 非常感谢
答案 0 :(得分:4)
不幸的是@Aya建议的方法不起作用,因为GzipFile广泛使用文件对象的seek
方法(响应不支持)。
所以你基本上有两个选择:
将远程文件的内容读入io.StringIO
,并将对象传递给gzip.GzipFile
(如果文件很小)
将文件下载到磁盘上的临时文件中,并使用gzip.open
还有另一种选择(需要一些编码) - 使用zlib
模块实现自己的阅读器。这很容易,但你需要知道一个魔术常数(How can I decompress a gzip stream with zlib?)。
答案 1 :(得分:0)
对于Python v3.2或更高版本,您可以使用gzip.GzipFile
类来包装urllib2.urlopen()
返回的文件对象,如下所示......
import urllib2
import gzip
response = urllib2.urlopen(url)
gunzip_response = gzip.GzipFile(fileobj=response)
content = gunzip_response.read()
print content
...在您阅读时会透明地解压缩响应流。
答案 2 :(得分:0)
如果你使用Python 3.2或更高版本,GzipFile中的错误(需要tell
支持)是固定的,但他们显然不会将修复程序向后移植到Python 2.x