エラーメッセージのセットを分析し、これらのメッセージをグループ化するために特定のパターン(正規表現)に一致するかどうかをチェックするpythonスクリプトがあります。たとえば、「ファイルxは「存在する」および「ファイルyが存在しない」は、「ファイル。*が存在しない」と一致し、「ファイルが見つかりません」カテゴリの2つのオカレンスとして考慮されます。
パターンとカテゴリの数が増えるにつれて、これらのカップルの「正規表現/表示文字列」を構成ファイル(基本的にはある種の辞書シリアル化)に入れたいと思います。
このファイルを手動で編集できるようにしたいので、任意の形式のバイナリシリアル化を破棄します。また、エスケープする文字(&<>など)の問題を回避するためにxmlシリアル化に頼りたくありません。 )。
これを達成するための良い方法が何であるかについて何か考えがありますか?
更新:DarenThomasとFedericoRamponiに感謝しますが、任意のコードを含む外部pythonファイルを作成することはできません。
あなたには2つのまともなオプションがあります:
標準のPython構成ファイルはINI [sections]
とkey : value
またはkey = value
のペアを持つファイルのように見えます。この形式は次のとおりです。
YAMLは、構成用に特別に設計されているのではなく、人間に優しいデータシリアル化形式になるように設計されているという点で異なります。それは非常に読みやすく、同じデータを表すためのいくつかの異なる方法を提供します。問題については、次のようなYAMLファイルを作成できます。
file .* does not exist : file not found
user .* not found : authorization error
またはこのように:
{ file .* does not exist: file not found,
user .* not found: authorization error }
PyYAMLの使用はこれ以上簡単ではありません。
import yaml
errors = yaml.load(open('my.yaml'))
この時点で、errors
は期待される形式のPython辞書です。YAMLは辞書以上のものを表すことができます。ペアのリストが必要な場合は、次の形式を使用してください。
-
- file .* does not exist
- file not found
-
- user .* not found
- authorization error
または
[ [file .* does not exist, file not found],
[user .* not found, authorization error]]
これは、yaml.load
が呼び出されたときにリストのリストを生成します。
YAMLの利点の1つは、データを適切な形式に変換するためのカットアンドペーストと大量の検索/置換ではなく、既存のハードコードされたデータをファイルにエクスポートして初期バージョンを作成できることです。
YAML形式に慣れるまでには少し時間がかかりますが、PyYAMLの使用は、ConfigParserを使用するよりもさらに簡単です。利点は、YAMLを使用してデータを表現する方法に関してより多くのオプションがあることです。
どちらも現在のニーズに合うように聞こえますが、ConfigParserは開始が簡単ですが、YAMLは、ニーズが拡大した場合に、将来的に柔軟性を高めます。
頑張ってください!
config.py
という名前のpythonモジュール(つまりファイル))または次の内容の何かを書くことがあります。
config = {
'name': 'hello',
'see?': 'world'
}
これは、次のように「読み取る」ことができます。
from config import config
config['name']
config['see?']
簡単。
ConfigObj はConfigParserよりも操作が簡単だと聞きました。 IPython、Trac、Turbogearsなどの多くの大きなプロジェクトで使用されています...
彼らから はじめに :
ConfigObjは、シンプルですが強力な構成ファイルのリーダーおよびライターであり、iniファイルのラウンドトリッパーです。その主な機能は、簡単なプログラマーのインターフェースと構成ファイルの単純な構文で、非常に使いやすいことです。ただし、他にも多くの機能があります。
標準ライブラリに ConfigParser モジュールが必要だと思います。 INIスタイルファイルの読み取りと書き込みを行います。リンク先の標準ドキュメントの例とドキュメントは、非常に包括的です。
構成ファイルにアクセスできるのがあなただけの場合は、単純な低レベルのソリューションを使用できます。テキストファイルの「辞書」をタプル(正規表現、メッセージ)のリストとして、python式:
[
("file .* does not exist", "file not found"),
("user .* not authorized", "authorization error")
]
f = open("messages.py")
messages = eval(f.read()) # caution: you must be sure of what's in that file
f.close()
messages = [(re.compile(r), m) for (r,m) in messages]
私は通常、Darenが提案したように、構成ファイルをPythonスクリプト:
patterns = {
'file .* does not exist': 'file not found',
'user .* not found': 'authorization error',
}
次に、次のように使用できます。
import config
for pattern in config.patterns:
if re.search(pattern, log_message):
print config.patterns[pattern]
ちなみに、これはDjangoが設定ファイルで行うことです。