我想从机架空间解析日志文件。我正在使用官方的 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
更新
我注意到,空字符串并不完全正确。这是一个循环,只有第一次出现是空的。下一次我确实有数据(看起来像是压缩过的),但我得到了这个 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())
更新三 现在确实有效:
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
如何在这里进行?是否有一些简单的方法可以将传入的数据视为普通字符串,以了解我是否走对了路?