[英]Decompress remote .gz file in Python
我有一個Python的問題。
我的情況:我有一個來自合作伙伴平台的gzip文件(ieh.p // .... namesite ... / xxx)如果我點擊瀏覽器中的鏈接,它會下載一個文件(例如namefile.xml) 。廣州)。
所以......如果我用python讀取這個文件,我可以解壓縮並讀取它。
碼:
content = gzip.open(namefile.xml.gz,'rb')
print content.read()
但是,如果我嘗試從遠程源讀取文件,我不能。 從遠程文件我只能讀取編碼的字符串,但不能解碼它。
碼:
response = urllib2.urlopen(url)
encoded =response.read()
print encoded
使用此代碼,我可以讀取編碼的字符串...但我不能用gzip或lzip解碼它。
有什么建議嗎? 非常感謝
不幸的是,@ Aya建議的方法不起作用,因為GzipFile廣泛使用文件對象的seek
方法(響應不支持)。
所以你基本上有兩個選擇:
將遠程文件的內容讀入io.StringIO
,並將對象傳遞給gzip.GzipFile
(如果文件很小)
將文件下載到磁盤上的臨時文件中,然后使用gzip.open
還有另一種選擇(需要一些編碼) - 使用zlib
模塊實現自己的閱讀器。 這很容易,但你需要知道一個魔術常量( 如何用zlib解壓縮gzip流? )。
對於Python v3.2或更高版本,您可以使用gzip.GzipFile
類來包裝gzip.GzipFile
urllib2.urlopen()
返回的文件對象,如下所示......
import urllib2
import gzip
response = urllib2.urlopen(url)
gunzip_response = gzip.GzipFile(fileobj=response)
content = gunzip_response.read()
print content
...當您閱讀時,它將透明地解壓縮響應流。
如果您使用Python 3.2或更高版本,GzipFile中的錯誤(需要tell
支持)是固定的,但它們顯然不會將修復程序向后移植到Python 2.x
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.