我正在编写我的第二个python脚本来尝试解析配置文件的内容,并希望得到一些noob建议。我不确定它是否最好使用正则表达式解析我的脚本,因为它的多行?我也一直在阅读关于词典的内容,并想知道这是不是很好的做法。我不一定只是朝着正确的方向寻找代码。
示例:我的配置文件如下所示。
Job {
Name = "host.domain.com-foo"
Client = host.domain.com-fd
JobDefs = "DefaultJob"
FileSet = "local"
Write Bootstrap = "/etc/foo/host.domain.com-foo.bsr"
Pool = storage-disk1
}
我应该使用正则表达式,分割线还是模块?如果我的配置文件中有多个作业,我会使用字典将作业与池关联吗?
答案 0 :(得分:8)
如果您可以更改配置文件格式,则可以直接将文件写为Python文件。
job = {
'Name' : "host.domain.com-foo",
'Client' : "host.domain.com-fd",
'JobDefs' : "DefaultJob",
'FileSet' : "local",
'Write Bootstrap' : "/etc/foo/host.domain.com-foo.bsr",
'Pool' : 'storage-disk1'
}
from config import job
print job['Name']
答案 1 :(得分:5)
这个任务有许多现有的替代品,json,pickle和yaml来命名3.除非你真的想自己实现,否则你应该使用其中之一。即使你自己滚动,遵循上述之一的格式仍然是一个好主意。
此外,使用解析器/生成器或类似工具进行解析是一个更好的主意,正则表达式将更难维护,并且对于此类任务来说效率更低。
答案 2 :(得分:5)
如果您的配置文件可以变成python文件,只需将其设为字典并导入模块。
Job = { "Name" : "host.domain.com-foo",
"Client" : "host.domain.com-fd",
"JobDefs" : "DefaultJob",
"FileSet" : "local",
"Write BootStrap" : "/etc/foo/host.domain.com-foo.bsr",
"Pool" : "storage-disk1" }
您只需调用Job [“Name”]等等即可访问这些选项。
ConfigParser也很容易使用。您可以创建一个如下所示的文本文件:
[Job]
Name=host.domain.com-foo
Client=host.domain.com-fd
JobDefs=DefaultJob
FileSet=local
Write BootStrap=/etc/foo/host.domain.com-foo.bsr
Pool=storage-disk1
保持简单,就像上面的一样。
答案 3 :(得分:4)
ConfigParser模块可能是解析python脚本正在使用的配置文件的最Pythonic和staight-forward方法。
如果您只能使用您概述的特定格式,那么使用pyparsing非常好。
答案 4 :(得分:2)
我认为正则表达式不足以解析这样的东西。您可以查看真正的解析器,例如pyparsing。或者,如果文件格式在您的控件内,您可以考虑使用XML。有用于解析的标准Python库。