从python中的配置文件中读取数组

Sco*_*pil 5 python tuples configuration-files

我有个问题.我的程序使用配置文件来设置选项,其中一个选项是元组.这就是我的意思:

[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/
Run Code Online (Sandbox Code Playgroud)

etc ...我可以使用Python中的ConfigParser模块将其解析为元组吗?有一些简单的方法来做到这一点?

小智 9

如果你可以改变这样的配置格式:

folder = /home/scorpil
         /media/sda5/
         /media/sdb5/
Run Code Online (Sandbox Code Playgroud)

然后在python中:

config.get("common", "folder").split("\n")
Run Code Online (Sandbox Code Playgroud)


Joh*_*rth 6

您的配置可能是:

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

假设您在名为 foo.cfg 的文件中有配置,您可以执行以下操作:

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

print folder
print type(folder)
Run Code Online (Sandbox Code Playgroud)

这应该产生:

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

-- 编辑 -- 从那以后我改变了我的想法,今天我认为在这种情况下使用 eval 是一个坏主意。即使在受限环境中,如果配置文件在用户控制之下,这也可能是一个非常糟糕的主意。今天我可能会推荐用 split 做一些有趣的事情来避免恶意代码执行。

  • 邪恶的不,可怕的危险是的。更安全地使用 eval() 的关键是确保您已经为 eval() 指定了全局和局部参数。有关更多详细信息,请参阅 http://docs.python.org/2/library/functions.html#eval。 (2认同)