繁体   English   中英

从压缩流中读取了多少个字节?

[英]How many bytes have been read from a compressed stream?

我想从Python的压缩流中读取数据时有一些进度指示器。 我对从压缩流中读取的字节数感兴趣,而不是产生了多少个解压缩数据。

我的程序如下所示:

#!/usr/bin/env python3

import lzma

filename = 'test.xz'
with lzma.open(filename, mode='rt') as f:
    for ln, l in enumerate(f):
        process(l)
        if ln % 1000 == 0:
            print('Read %d bytes from %s.' % (???, filename))

我如何获得此信息? 我试过f.tell()但它给出了一个错误( OSError: telling position disabled by next() call )。 即使我通过显式使用f.readline()避免了这种情况,所报告的进度f.readline()处理未压缩的数据。

事实证明,您要做的就是使用f.fileno()方法获取与压缩文件关联的文件描述符。 然后,您可以使用os.fdopen()来构造一个文件对象。 唯一棘手的部分是设置closefd=False以便由lzma库关闭文件描述符一次。

#!/usr/bin/env python3

import lzma
import os

filename = 'test.xz'
with lzma.open(filename, mode='rt') as f:
    fc = os.fdopen(f.fileno(), closefd=False)
    for ln, l in enumerate(f):
        process(l)
        if ln % 1000 == 0:
            print('Read %d bytes from %s.' % (fc.tell(), filename))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM