3

構成ファイルの内容を解析しようとする 2 番目の 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 ファイルとして直接書き込むことができます。

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']
于 2009-06-09T05:32:10.863 に答える
5

このタスクには、json、pickle、yaml など、多数の既存の代替手段があります。これを自分で実装したい場合を除き、これらのいずれかを使用する必要があります。自分で作成したとしても、上記のいずれかの形式に従うことをお勧めします。

また、パーサー/ジェネレーターまたは同様のツールを使用して解析を行うことをお勧めします。正規表現は維持が難しく、このタイプのタスクには非効率的です。

于 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"]...などを呼び出すだけで、オプションにアクセスできます。

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 に答える