configparser不显示部分

时间:2019-11-20 08:59:17

标签: python configparser

我将节及其值添加到了ini文件中,但是configparser不想打印我总共拥有的节。我所做的:

import configparser
import os


# creating path
current_path = os.getcwd()
path = 'ini'
try:
    os.mkdir(path)
except OSError:
    print("Creation of the directory %s failed" % path)


# add section and its values
config = configparser.ConfigParser()
config['section-1'] = {'somekey' : 'somevalue'}
file = open(f'ini/inifile.ini', 'a')
with file as f:
    config.write(f)
file.close()

# get sections
config = configparser.ConfigParser()
file = open(f'ini/inifile.ini')
with file as f:
    config.read(f)
    print(config.sections())
file.close()

返回

  

[]

相似的代码为in the documentation,但无效。我做错了什么以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

config.read()the docs中获取一个文件名(或它们的列表),而不是一个文件描述符对象:

  

read ( filenames, encoding=None )

     

尝试读取和解析可迭代的文件名,返回已成功解析的文件名列表。

     

如果文件名是字符串,字节对象或类似路径的对象,则将其视为单个文件名。 ...

     

如果不存在任何命名文件,则ConfigParser实例将包含一个空数据集。 ...

文件对象是字符串的可迭代对象,因此基本上,配置解析器试图将文件中的每个字符串作为文件名读取。这很有趣而且很愚蠢,因为如果您将包含实际配置文件名的文件传递给它,它将起作用。

无论如何,您应该将文件名直接传递到config.read(),即     config.read(“ ini / inifile.ini”)

或者,如果您想使用文件描述符对象,只需使用config.read_file(f)。阅读docs for read_file()了解更多信息。


顺便说一句,您正在复制上下文管理器正在进行的某些工作,但没有任何收益。您可以使用with块,而无需先显式创建对象或之后将其关闭(它会自动关闭)。保持简单:

with open("path/to/file.txt") as f:
    do_stuff_with_file(f)