簡體   English   中英

用Python解壓縮遠程.gz文件

[英]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方法(響應不支持)。

所以你基本上有兩個選擇:

  1. 將遠程文件的內容讀入io.StringIO ,並將對象傳遞給gzip.GzipFile (如果文件很小)

  2. 將文件下載到磁盤上的臨時文件中,然后使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM