3

Google でこの種のものを見つけたことがありません。次のことを行うためのより迅速な方法があるかどうかを知りたいです。

Python で記述された Java プログラムのビルド スクリプトを解析する必要があります。より具体的には、これらのビルド スクリプトにハードコードされている辞書を解析したいと考えています。

たとえば、これらのスクリプトには次のようなエントリが含まれています。

config = {}

config["Project"] = \
    {
        "Name"                          : "ProjName",
        "Version"                       : "v2",
        "MinimumPreviousVersion"        : "v1",
    }   

def actualCode ():
# Some code that actually compiles the relevant files

(実際のコンパイルは、別のプログラムへの呼び出しを介して行われます。このスクリプトは、抽出したい必要なオプションを設定するだけです)。たとえば、「Name」="ProjName" などを抽出します。

Python の一部である ConfigParser ライブラリを認識していますが、これは .ini ファイル用に設計されているため、私が話しているビルド スクリプトに表示される可能性のある実際の Python コードに問題 (例外のスローとクラッシュ) があります。したがって、このライブラリを使用すると、最初にファイルを読み込んで、ConfigParser が反対するファイルの行を削除する必要があります。

構成ファイルを通常のファイルとして読み込んで解析するよりも速い方法はありますか? これができるライブラリを探しています。このライブラリがどの言語にあるかはあまり気にしません。

4

3 に答える 3

2

私は同様の問題を解決しようとしていました。ディレクトリをJSONオブジェクトに変換して、JSONオブジェクトを使用してキーを可能な限り簡単にクエリできるようにしました。このソリューションは、マルチレベルのキーと値のペアで機能しました。私

これがアルゴリズムです。

  1. 文字列またはファイルからの正規表現を使用して、config["key_name"] を見つけます。次の正規表現を使用します

    config(.*?)\\[(.*?)\\]

  2. 中括弧内のデータを文字列に取得します。複雑なディレクトリでは {} または [] 型のネストされたブラケットが存在する可能性があるため、スタック ベースのコードを使用してください。
  3. 次のように、丸括弧 "()" を角括弧 "[]" に、バックスラッシュ "\" を空白文字 " " に置き換えます。

      expression.replace('(', '[')
      .replace(')', ']')
      .replace('\\', ' ')
    
  4. JSONObject json = (JSONObject) parser.parse(式)

これが JSON オブジェクトです。好きなように使用できます。

于 2015-01-16T12:22:38.807 に答える
0

パーボイルドを試してみてください。これは Java で書かれており、文法も Java で記述します。

スタックを使用して要素などを保存します。そのパーサー クラスはジェネリックであり、そこから最終結果を得ることができます。

于 2013-06-14T08:53:52.250 に答える