3

我正在编写我的第二个 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
  }

我应该使用正则表达式、行拆分还是模块?如果我的配置文件中有多个作业,我会使用字典将作业与池相关联吗?

4

5 回答 5

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'
}

你的脚本.py

from config import job

print job['Name']
于 2009-06-09T05:32:10.863 回答
5

这个任务有许多现有的替代方案,json、pickle 和 yaml 来命名 3。除非你真的想自己实现这个,你应该使用其中之一。即使您自己滚动,遵循上述格式之一仍然是一个好主意。

此外,使用解析器/生成器或类似工具进行解析是一个更好的主意,正则表达式对于此类任务将更难维护且效率更低。

于 2009-06-09T03:51:14.793 回答
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"]..etc 来访问这些选项。

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

只需像上述之一一样简单。

于 2009-06-09T05:32:44.123 回答
4

标准库中的ConfigParser模块可能是解析 Python 脚本正在使用的配置文件的最 Pythonic 和最直接的方式。

如果您仅限于使用您概述的特定格式,那么使用 pyparsing 非常好。

于 2009-06-09T04:21:11.540 回答
2

我认为正则表达式不足以解析这样的内容。您可以查看真正的解析器,例如pyparsing。或者,如果文件格式在您的控制范围内,您可以考虑使用 XML。有用于解析的标准 Python 库。

于 2009-06-09T03:40:27.503 回答