2016-03-29 8 views
2

Ich habe Daten aus HTTP-Antwort gezippt. Ich habe folgenden Code:Python dekomprimieren gzip Daten im Speicher ohne Datei

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 

den Eingang Inhalt gzip dekomprimiert und zurück string (http Antwort ist gzipped json). - Es klappt.

Aber ich brauche es ohne zu erstellen Test Datei - alles im Speicher.

I modifiziert es an:

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 

aber es crash (gzipDecode leere Ausgabe erzeugen) beim Parsen 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 

Was ich schlecht tun?

+2

* aber es abstürzen json in Parsen *. Wie kommt es zum Absturz? Können Sie bitte eine Beispieleingabe, erwartete Ausgabe und tatsächliche Ausgabe (einschließlich der vollständigen Rückverfolgung, falls vorhanden) liefern? –

Antwort

4

Sie müssen zurück an den Start suchen, bevor Sie lesen können:

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

data = outFile.read().replace('\n', '') 
Verwandte Themen