2016-03-29 21 views
2

HTTP応答からデータをgzippedしました。私は次のコードを持っています:Pythonはファイルなしでメモリ内のgzipデータを解凍します

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 

私は悪い何?

+2

をしかし、それは* JSONを解析してクラッシュ。どのようにクラッシュするのですか?いくつかのサンプル入力、期待される出力、実際の出力(完全なトレースバックがあればそれを含む)を提供してください。 –

答えて

4

あなたが読むことができる前に戻ってスタートを模索する必要があります:*

outFile.write(decompressedFile.read()) 
outFile.flush() 
outFile.seek(0) 

data = outFile.read().replace('\n', '') 
関連する問題