Python Советы для начинающих. Regex, словари и т. Д.? - PullRequest
3 голосов
/ 09 июня 2009

Я пишу свой второй скрипт на 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
  }

Должен ли я использовать регулярное выражение, разбиение строки или, может быть, модуль? Если бы в моем конфигурационном файле было несколько заданий, использовал бы я словарь для сопоставления задания с пулом?

Ответы [ 5 ]

8 голосов
/ 09 июня 2009

Если вы можете изменить формат файла конфигурации, вы можете напрямую записать свой файл как файл 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 голосов
/ 09 июня 2009

Если ваш конфигурационный файл можно превратить в файл 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

Просто будь проще, как один из вышеперечисленных.

5 голосов
/ 09 июня 2009

Существуют многочисленные существующие альтернативы для этой задачи, json, pickle и yaml на имя 3. Если вы действительно не хотите реализовать это самостоятельно, вам следует использовать один из них. Даже если вы делаете свой собственный бросок, придерживаться формата одного из вышеперечисленных по-прежнему хорошая идея.

Кроме того, гораздо лучше использовать синтаксический анализатор / генератор или аналогичный инструмент для анализа, регулярные выражения будут сложнее поддерживать и более неэффективны для задач такого типа.

4 голосов
/ 09 июня 2009

Модуль ConfigParser из стандартной библиотеки, вероятно, является наиболее Pythonic и верным способом анализа файла конфигурации, который использует ваш скрипт Python.

Если вы ограничены использованием определенного формата, который вы обрисовали, тогда использование pyparsing довольно хорошо.

2 голосов
/ 09 июня 2009

Я не думаю, что регулярное выражение достаточно для анализа чего-то подобного. Вы можете посмотреть на настоящий парсер, например pyparsing . Или, если формат файла находится под вашим контролем, вы можете рассмотреть XML. Существуют стандартные библиотеки Python для этого.

...