Python解压缩内存中的gzip数据而无需文件 [英] Python decompress gzip data in memory without file
本文介绍了Python解压缩内存中的gzip数据而无需文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我从HTTP回复中压缩了数据.我有以下代码:
I have gzipped data from HTTP reply. I have following code:
def gzipDecode(self, content):
import StringIO
import gzip
outFilePath = 'test'
compressedFile = StringIO.StringIO(content)
decompressedFile = gzip.GzipFile(fileobj=compressedFile)
with open(outFilePath, 'w') as outfile:
outfile.write(decompressedFile.read())
data = ''
with open(outFilePath, 'r') as myfile:
data=myfile.read().replace('\n', '')
return data
解压缩输入的压缩内容并返回字符串(http答复是压缩的json). -可以.
which decompress input gzipped content and return string (http reply is gzipped json). - It works.
但是我需要它而无需创建 test 文件-全部在内存中.
But I need it without creating test file - all in memory.
我将其修改为:
def gzipDecode(self, content):
import StringIO
from io import BytesIO
import gzip
outFile = StringIO.StringIO()
compressedFile = StringIO.StringIO(content)
decompressedFile = gzip.GzipFile(fileobj=compressedFile)
outFile.write(decompressedFile.read())
outFile.flush()
data = outFile.read().replace('\n', '')
print "_" + data + "_"
return data
但在解析json时崩溃( gzipDecode 产生空输出)
but it crash (gzipDecode produce empty output) in parsing json:
Traceback (most recent call last):
__
File "/usr/lib/python2.7/SocketServer.py", line 593, in process_request_thread
self.finish_request(request, client_address)
----------------------------------------
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
Exception happened during processing of request from ('10.123.66.3', 39853)
self.RequestHandlerClass(request, client_address, self)
----------------------------------------
File "/usr/lib/python2.7/SocketServer.py", line 649, in __init__
self.handle()
File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle
self.handle_one_request()
File "/usr/lib/python2.7/BaseHTTPServer.py", line 328, in handle_one_request
method()
File "/tmp/test_server.py", line 92, in do_POST
data = json.loads(file_content)
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
我做错了什么?
推荐答案
您需要重新开始才能阅读:
You need to seek back to the start before you can read:
outFile.write(decompressedFile.read())
outFile.flush()
outFile.seek(0)
data = outFile.read().replace('\n', '')
这篇关于Python解压缩内存中的gzip数据而无需文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文