如何在Python中动态流式生成gzip?

阿米鲁什

我想使用asyncio在网络上流式传输大日志文件。我从数据库中检索数据,对其进行格式化,然后使用python的zlib对其进行压缩,然后通过网络进行流式处理。

这基本上是我使用的代码:

@asyncio.coroutine
def logs(requests):
    # ...

    yield from resp.prepare(request)

    # gzip magic number and compression format
    resp.write(b'\x1f\x8b\x08\x00\x00\x00\x00\x00')
    compressor = compressobj()
    for row in rows:
        ip, uid, date, url, answer, volume = row
        NCSA_ROW = '{} {} - [{}] "GET {} HTTP/1.0" {} {}\n'
        row = NCSA_ROW.format(ip, uid, date, url, answer, volume)
        row = row.encode('utf-8')
        data = compressor.compress(row)
        resp.write(data)
    resp.write(compressor.flush())
    return resp

我检索到的文件无法使用gunzip和zcat打开,出现以下错误:

gzip: out.gz: unexpected end of file
马克·阿德勒

您的gzip标头是错误的(从8个字节而不是10个字节),然后跟随zlib流使用不同的标头和预告片。即使您有正确的gzip标头,并且如果您有原始的deflate流而不是gzip流,您仍然不会编写gzip预告片。

为此,请不要尝试编写自己的gzip标头。而是要求zlib编写一个完整的gzip流,该流将写入正确的标头,压缩数据和预告片。您可以通过提供towbits来做到这一点31compressobj()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在javascript / node中动态生成测试用例?

来自分类Dev

如何在python中动态加载模块

来自分类Dev

如何在Python中动态构建树

来自分类Dev

如何在Twitter的流式API中检查速率限制

来自分类Dev

如何在胡须中渲染动态生成的密钥

来自分类Dev

如何在Amazon EMR的Pig中使用Python流式UDF

来自分类Dev

如何在Python中动态引用变量

来自分类Dev

如何在python中读取gzip netcdf文件?

来自分类Dev

如何在流式char数组中编辑元素

来自分类Dev

如何在函数中动态生成子类?

来自分类Dev

如何在ARM模板中动态生成Traffic Manager端点?

来自分类Dev

如何在Python中创建动态列表?

来自分类Dev

如何在Elixir中流式传输到文件中?

来自分类Dev

如何在Python中动态重载函数?

来自分类Dev

如何在Python中动态重载函数?

来自分类Dev

如何在Spring Boot中收听流式API?

来自分类Dev

如何在python中动态调用方法?

来自分类Dev

如何在动态生成的HTML页面中运行JavaScript?

来自分类Dev

如何在VLC中按需流式传输多个文件?

来自分类Dev

如何在iPhone中的NSUserDefaults中动态生成多个密钥

来自分类Dev

如何在Twitter的流式API中检查速率限制

来自分类Dev

如何在angular.js中动态生成列表

来自分类Dev

如何在Android中为动态创建的CheckBox生成动作?

来自分类Dev

如何在jquery中动态生成事件?

来自分类Dev

如何在Angular中动态生成字段类型编号?

来自分类Dev

如何在python中动态生成文件名?

来自分类Dev

如何在HTML文件中动态生成JSON表单对象?

来自分类Dev

如何在Vue中动态生成div?

来自分类Dev

如何在javascript中获取动态生成按钮的内部文本?

Related 相关文章

热门标签

归档