[英]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.