Python3 configparser以first arg开头必须是字节或字节元组,而不是str

时间:2019-03-12 10:09:52

标签: python python-3.x tar configparser

我正在这样做:

tar = tarfile.open("stuff.tar")
cfg = configparser.ConfigParser(allow_no_value=True)
cfg.read_file(tar.extractfile("ook.ini"))

文件“ ook.ini”确实位于“ stuff.tar”档案中。

但是,我得到了:

[…] ← Really not relevant stack trace. It's just where my code calls this.
File "/usr/local/lib/python3.7/configparser.py", line 1030, in _read
    if line.strip().startswith(prefix):
TypeError: startswith first arg must be bytes or a tuple of bytes, not str

根据文档read_file() read and parse configuration data from f which must be an iterable yielding Unicode strings,所以我通过的内容应该没问题吗?

我在做什么错了?

1 个答案:

答案 0 :(得分:3)

TarFile.extractfile(member)返回以 binary 模式打开的文件。 read_file的等效项是在 text 模式下打开的文件。因此,两者不匹配。

您可以将提取的文件包装在io.TextIOWrapper或转换为unicode的生成器中:

tar = tarfile.open("stuff.tar")
cfg = configparser.ConfigParser(allow_no_value=True)
cfg.read_file(
    line.decode() for line in tar.extractfile("ook.ini")
)