在Python中从配置文件读取数组

9 投票
7 回答
26083 浏览
提问于 2025-04-16 06:33

我遇到了一个问题。我的程序使用配置文件来设置选项,其中一个选项是一个元组。我的意思是这样的:

[common]
logfile=log.txt
db_host=localhost
db_user=root
db_pass=password
folder[1]=/home/scorpil
folder[2]=/media/sda5/
folder[3]=/media/sdb5/

等等……我能用Python里的ConfigParser模块把这个解析成元组吗?有没有什么简单的方法可以做到这一点?

7 个回答

4

创建配置:

folders = ['/home/scorpil', '/media/sda5/', '/media/sdb5/']
config.set('common', 'folders', json.dumps(folders))

加载配置:

tuple(json.loads(config.get('common', 'folders')))
6

你的配置文件可以是这样的:

[common]
logfile=log.txt
db_host=localhost
db_user=root
db_pass=password
folder = ("/home/scorpil", "/media/sda5/", "/media/sdb5/")

假设你的配置文件叫做 foo.cfg,你可以这样做:

import ConfigParser
cp = ConfigParser.ConfigParser()
cp.read("foo.cfg")
folder = eval(cp.get("common", "folder"), {}, {})

print folder
print type(folder)

这样做应该会得到:

('/home/scorpil', '/media/sda5/', '/media/sdb5/')
<type 'tuple'>

-- 编辑 --
我现在改变了主意,认为在这种情况下使用 eval 是个坏主意。即使在受限制的环境中,如果配置文件是用户控制的,那可能会非常糟糕。现在我可能会建议使用 split 来避免执行恶意代码。

14

如果你能把配置格式改成这样:

folder = /home/scorpil
         /media/sda5/
         /media/sdb5/

那么在Python中:

config.get("common", "folder").split("\n")

撰写回答