我正在这样做:
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,所以我通过的内容应该没问题吗?
我在做什么错了?
答案 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")
)