2016-05-07 17 views
1

Ich erhalte riesige Datenmengen von Twitter mit Tweepy (einer Python Twitter API-Bibliothek). Was ich tun möchte, ist den Stream der empfangenen Tweets zu komprimieren und in einer Datei zu speichern.Wie komprimiere ich Twitter-Streaming mit LZO in Linux/Python/Tweepy-Umgebung?

Die Komprimierung muss LZO sein und ich möchte keine Linux-Pipes für die Komprimierung verwenden. Ich möchte LZO direkt aus dem Python-Code verwenden. Mit Linux Rohren ich tun konnte:

Python downloader.py | lzop -c > output.json.lzo 

Aber ich will nicht Rohre verwenden und will den Strom innerhalb der Python-Skript-Downloader komprimieren.

Ich konnte keine Python-Bibliothek oder Beispielcode zum Komprimieren von Streaming-Daten mit LZO finden.

+0

ich ein Stück Code hier schrieb, dass die Arbeit erledigt: https: //github.com/afsichrahimi/twitter-fetcher/blob/master/fetcher.py – Ash

Antwort

1

zwei Optionen:

  1. die library verwenden.

  2. wenn aus irgendeinem Grund Sie nicht die Bibliothek benutzen können, den folgenden Code ein Äquivalent des einen ist man schrieb:

    from subprocess import Popen, PIPE, STDOUT 
    
    p = Popen(['lzop', '-c'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)  
    result_stdout = p.communicate(input=json.dump(results))[0] 
    
+0

Danke, ich habe Pipes im Python-Code verwendet. – Ash

+1

Der letzte Code ist hier für Benutzer mit dem gleichen Problem in der Zukunft http://pastebin.com/npzW5fh7 – Ash

+1

Auch als eine weitere Anmerkung: Wenn Sie Streaming verwenden, sollten Sie nicht p.communicate verwenden, wie es die Pipe danach schließt. Sie sollten stattdessen p.stdin.write (data) verwenden, um die Pipe offen zu halten. Zum Ausgeben der Ausgabe in eine Datei anstelle von stdout = PIPE können Sie das PIPE durch eine Datei ersetzen, wie in open ('output.json.lzo', 'wb'). – Ash