给初学者的Python建议:正则表达式、字典等?

3 投票
5 回答
779 浏览
提问于 2025-04-15 12:07

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

我应该使用正则表达式、行分割,还是用某个模块呢?如果我的配置文件里有多个任务,我是否应该用字典来把任务和池子关联起来?

5 个回答

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

只要保持简单,就像上面那样。

8

如果你可以修改配置文件的格式,那你可以直接把你的文件写成一个Python文件。

config.py

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

yourscript.py

from config import job

print job['Name']
5

有很多现成的选择可以完成这个任务,比如json、pickle和yaml,这里就提到这三种。如果你不是特别想自己动手实现,建议你使用其中一种。即使你决定自己写,遵循上面提到的格式也是个不错的主意。

另外,使用解析器、生成器或类似的工具来处理解析工作会更好,正则表达式在这类任务中会更难维护,而且效率也不高。

撰写回答