python gzip解压_Python gzip:有没有办法从字符串解压缩?

I've read this SO post around the problem to no avail.

I am trying to decompress a .gz file coming from an URL.

url_file_handle=StringIO( gz_data )

gzip_file_handle=gzip.open(url_file_handle,"r")

decompressed_data = gzip_file_handle.read()

gzip_file_handle.close()

... but I get TypeError: coercing to Unicode: need string or buffer, cStringIO.StringI found

What's going on?

Traceback (most recent call last):

File "/opt/google/google_appengine-1.2.5/google/appengine/tools/dev_appserver.py", line 2974, in _HandleRequest

base_env_dict=env_dict)

File "/opt/google/google_appengine-1.2.5/google/appengine/tools/dev_appserver.py", line 411, in Dispatch

base_env_dict=base_env_dict)

File "/opt/google/google_appengine-1.2.5/google/appengine/tools/dev_appserver.py", line 2243, in Dispatch

self._module_dict)

File "/opt/google/google_appengine-1.2.5/google/appengine/tools/dev_appserver.py", line 2161, in ExecuteCGI

reset_modules = exec_script(handler_path, cgi_path, hook)

File "/opt/google/google_appengine-1.2.5/google/appengine/tools/dev_appserver.py", line 2057, in ExecuteOrImportScript

exec module_code in script_module.__dict__

File "/home/jldupont/workspace/jldupont/trunk/site/app/server/tasks/debian/repo_fetcher.py", line 36, in

main()

File "/home/jldupont/workspace/jldupont/trunk/site/app/server/tasks/debian/repo_fetcher.py", line 30, in main

gziph=gzip.open(fh,'r')

File "/usr/lib/python2.5/gzip.py", line 49, in open

return GzipFile(filename, mode, compresslevel)

File "/usr/lib/python2.5/gzip.py", line 95, in __init__

fileobj = self.myfileobj = __builtin__.open(filename, mode or 'rb')

TypeError: coercing to Unicode: need string or buffer, cStringIO.StringI found

解决方案

gzip.open is a shorthand for opening a file, what you want is gzip.GzipFile which you can pass a fileobj

open(filename, mode='rb', compresslevel=9)

#Shorthand for GzipFile(filename, mode, compresslevel).

vs

class GzipFile

__init__(self, filename=None, mode=None, compresslevel=9, fileobj=None)

# At least one of fileobj and filename must be given a non-trivial value.

so this should work for you

gzip_file_handle = gzip.GzipFile(fileobj=url_file_handle)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值