【问题标题】:How can I read in lists within a list using ConfigParser() in Python?如何在 Python 中使用 ConfigParser() 读取列表中的列表?
【发布时间】:2020-04-11 00:00:13
【问题描述】:

我已经看到很多关于如何在 Python 中使用 ConfigParser 读取列表的答案:

但我想知道如何在包含多个列表的列表中阅读

例如,我有一个 config.ini

[INPUT]
values = [[40000, 60000], [70000, 80000]]

我的 ma​​in.py 中的一个函数需要将上述内容读取为:

[[40000, 60000], [70000, 80000]]

我不确定这是否重要,但值可以是任何大小的列表,例如:

[[40000, 60000]]

[[40000, 60000], [70000, 80000], [90000, 95000]]

我知道以下内容不起作用,但为了清楚起见,我正在将列表中的列表读入 ma​​in.py,如下所示:

self.values = config['INPUT']['values']

self 在那里,因为我正在使用一个类。这些是我在 ma​​in.py 开头的声明:

import configparser
config = configparser.ConfigParser()
config.sections()
config.read('config.ini')

【问题讨论】:

    标签: python list config configparser


    【解决方案1】:

    您可以将列表(或列表或字典或其他任何内容)存储为字符串,并使用ast 来恢复它。

    配置:

    [INPUT]
    values = [[40000, 60000], [70000, 80000]]
    

    和脚本(简化为从配置中读取字符串变量不是问题):

    import ast
    list_in_list = ast.literal_eval(string_var_read_from_config)
    

    【讨论】:

    • 我格式化了我的配置文件以读取values 作为一个字符串,就像你在答案中提到的那样,我现在是否将它读入我的 main.py 如下? self.values = ast.literal_eval(['INPUT']['values']),如果我运行它,我会得到“TypeError:列表索引必须是整数或切片,而不是 str”。我需要将列表中的数字读取为整数。
    • 不,您忘记了您的值存储在config 对象中,所以self.values = ast.literal_eval(config['INPUT']['values'])
    • 谢谢,您使用import ast 的解决方案有效。但我注意到它对我有用的方式是不在我的配置文件中将values 设为字符串。 values = '[[40000, 60000], [70000, 80000]]' 对我不起作用,因为列表中的数字仍然作为字符串导入,但是,将 values = [[40000, 60000], [70000, 80000]] 放入我的配置文件中确实有效。不知道为什么会这样,但也许你可以详细说明一下。
    • 我更正了自己。默认情况下,配置解析器将此值作为字符串读取。如果添加引号,则它会读取带有引号的字符串。 ast 模块应该将其识别为字符串,并且确实如此。所以...没有引号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2021-03-23
    • 2015-04-13
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多