【问题标题】:Python argparser. List of dict in INIPython 参数解析。 INI 中的字典列表
【发布时间】:2013-08-07 17:54:21
【问题描述】:

我的 python 模块中有以下列表:

couples = [("somekey1", "somevalue1"), ("somekey2", "somevalue2"), ("somekey3", "somevalue3"),....]

我将我的应用程序的配置存储在“configs.ini”中,我使用 configparser 来读取它。 我检查了 configparser 的文档,但没有找到如何从文件中读取我的列表。

统一更新: 有谁知道我如何从我的配置中读取以下列表,或者可能存在另一种将其存储在文件中的方式?

UPD2:它是登录名和密码的列表。可能会有所帮助。

【问题讨论】:

  • 抱歉,请参阅更新。我需要从文件中读取它,而不是存储。
  • 这真的是配置文件吗?还是只是用户不需要直接与之交互的持久数据存储?
  • 这真的是我的应用程序的配置。 Pyhton 模块是开放的。用户可以将一些数据写入我的模块。但我想将它存储在配置中。
  • UPD2。也许会有所帮助。

标签: python ini argparse


【解决方案1】:

您可以使用 pickle 模块将列表转储并加载到文件中。

转储你的清单:

import pickle

couples = [("somekey1", "somevalue1"), ("somekey2", "somevalue2"), ("somekey3", "somevalue3"),....]

pickle.dump(couples, open("save.p", "wb"))

要加载您的列表:

couples = pickle.load(open("save.p", "rb"))

【讨论】:

  • 是否应该在使用pickle读取之前将其写入文件?我可以在不序列化的情况下保存它,然后用pickle读取吗?
  • 是的,您应该使用 pickle 转储您的列表,并使用 pickle 从中读取。如果需要,您还可以使用两列转储您的列表,一列用于键,另一列用于值。
  • 请务必前往 Pickle 最佳实践。根据文档,切勿取消从不受信任或未经身份验证的来源收到的数据。
【解决方案2】:

您正在寻找的可能是configparser 模块。查看这些链接了解更多详情:

1) How to read and write INI file with Python3?

2) http://docs.python.org/2.7/library/configparser.html#examples

【讨论】:

  • 配置解析器无法解决我的问题。我正在使用它。但我没有找到任何解决方案。
【解决方案3】:

我不确定我是否理解正确,但如果您想创建一个配置文件以轻松读取您显示的列表,然后在您的 configs.ini 中创建一个部分

[section]
key = value
key2 = value2
key3 = value3

然后

>> config = ConfigParser.RawConfigParser()
>> config.read('configs.ini')
>> items = config.items('section')
>> items
[('key', 'value'), ('key2', 'value2'), ('key3', 'value3')]

这基本上就是你所说的你需要的。

另一方面,如果您的意思是您的配置文件包含:

[section]
couples = [("somekey1", "somevalue1"), ("somekey2", "somevalue2"), ("somekey3", "somevalue3")]

你可以做的是扩展配置解析器,例如:

class MyConfigParser(ConfigParser.RawConfigParser):

    def get_list_of_tups(self, section, option):
        value = self.get(section, option)
        import re
        couples = re.finditer('\("([a-z0-9]*)", "([a-z0-9]*)"\)', value)
        return [(c.group(1), c.group(2)) for c in couples]

然后您的新解析器可以为您获取您的列表:

>> my_config = MyConfigParser()
>> my_config.read('example.cfg')
>> couples = my_config.get_list_of_tups('section', 'couples')
>> couples
[('somekey1', 'somevalue1'), ('somekey2', 'somevalue2'), ('somekey3', 'somevalue3')]

我认为第二种情况只是让自己变得困难。

【讨论】:

  • 谢谢。我认为可以使用您答案的第一部分。
猜你喜欢
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 2021-12-30
相关资源
最近更新 更多