ラックスペースからログファイルを解析したい。公式の python sdkを使用しています。以前にファイルをディスクに保存し、そこからgzip.open
.
現在、私はherokuを使用しており、ファイルをディスクに保存できない/保存したくないが、メモリ内で解凍を行います。
ただし、オブジェクトを文字列または疑似ファイル オブジェクトとしてダウンロードして処理することはできません。
誰かがアイデアを持っていますか?
logString = ''
buffer = logfile.stream()
while True:
try:
logString += buffer.next()
except StopIteration:
break
# logString is always empty here
# I'd like to have something that enables me to do this:
for line in zlib.decompress(logString):
# having each line of the log here
アップデート
空の文字列が完全に真実ではないことに気付きました。これはループを通過しており、最初の出現だけが空です。次の発生時にはデータがあります (gzip されているように見えます) が、次の zlib エラーが発生します。
zlib.error: Error -3 while decompressing data: incorrect header check
アップデートⅡ
提案どおり、cStringIO を実装しましたが、同じ結果になりました。
buffer = logfile.stream()
output = cStringIO.StringIO()
while True:
try:
output.write(buffer.next())
except StopIteration:
break
print(output.getvalue())
更新 III これは現在動作します:
output = cStringIO.StringIO()
try:
for buffer in logfile.stream():
output.write(buffer)
except StopIteration:
break
そして、少なくともここでクラッシュはありませんが、実際の行は得られないようです:
for line in gzip.GzipFile(fileobj=output).readlines():
# this is never reached
ここをどう進めますか?受信データを通常の文字列として表示して、正しい方法であるかどうかを知る簡単な方法はありますか?