我从HTTP回复中抓取了数据。我有以下代码:
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
解压缩输入gzipped内容并返回字符串(http回复是gzipped json)。 - 它有效。
但我需要它而不创建测试文件 - 全部在内存中。
我将其修改为:
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 产生空输出):
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
我做得不好?
答案 0 :(得分:4)
在您阅读之前,您需要回头寻找:
outFile.write(decompressedFile.read())
outFile.flush()
outFile.seek(0)
data = outFile.read().replace('\n', '')