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()
问题的地方。当我将该管道 |
更改为冒号 :
时,您的代码运行良好。
好的,我看到了类似的问题,但不完全相同。而且我无法弄清楚这个 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 aTarFile
object is limited in that it does not allow random access
这就是您 运行 遇到 readlines()
和 seek()
问题的地方。当我将该管道 |
更改为冒号 :
时,您的代码运行良好。