Python: readlines() with tar-file gives StreamError: seeking backwards is not allowed. What is wrong?

Python: readlines() with tar-file gives StreamError: seeking backwards is not allowed. What is wrong?

好的,我看到了类似的问题,但不完全相同。而且我无法弄清楚这个 python 代码到底出了什么问题:

import tarfile

tar_file = tarfile.open('something.tgz', mode="r|gz")
txt_file = tar_file.extractfile('inner.txt')
lines = txt_file.readlines()    
txt_file.close()
tar_file.close()

它给出 StreamError: seeking backwards is not allowed 由于 readlines()
但这个事实对我来说很奇怪,我试图理解我在这里错过了什么。

这一行有问题:

tar_file = tarfile.open('something.tgz', mode="r|gz")

根据 tarfile.open() 文档,正确的 mode 应该是 "r" - Open for reading with t运行sparent compression(推荐)"r:gz" - 使用 gzip 压缩打开阅读 。使用管道 | 字符创建一个流:

Use this variant in combination with e.g. sys.stdin, a socket file object or a tape device. However, such a TarFile object is limited in that it does not allow random access

这就是您 运行 遇到 readlines()seek() 问题的地方。当我将该管道 | 更改为冒号 : 时,您的代码运行良好。