2017-09-13 2 views
-3

コマンドラインでファイルを解析する:UNIXツールは私が変換したい次のようになりますPythonスクリプトを持って

import sys 
# more imports 


''' some comments ''' 

class Foo: 
    def _helper1(): 
     etc. 

    def _helper2(): 
     etc. 

    def foo1(): 
     d = { a:3, b:2, c:4 } 
     etc. 

    def foo2(): 
     d = { a:2, b:2, c:7 } 
     etc. 

    def foo3(): 
     d = { a:3, b:2, c:7 } 
     etc. 

    etc. 

    if __name__ == "__main__":  
     etc. 

私はちょうどfoo*()機能を解析し、維持できるようにしたいと思いますd={a:3, b:2}のような特定の属性を持つものだけです。明らかに、他のものはすべてfoo*()でなければ、変換は実行されます。 dは異なるキー、値を持つかもしれませんが、foo*()はよく定義されます。

私はチェーンでこれを行うために使用できるいくつかのUnixツールがありますか? grepを使用してfooを特定することができますが、ロジックの保持または拒否部分を適用するために次の2行をスキャンするにはどうすればよいですか?

編集:ノート、カスタムパーサーを作成する前にコマンドラインツールでこれを行うのが妥当かどうかを確認しようとしています。私はパーサーを書く方法を知っています。

+2

Pythonを操作するためのツールがPythonに組み込まれています。これは、アドホックなPythonパーサーに正規表現しようとするよりもはるかに確実に機能します。 – pvg

+0

こんにちは。あなたの質問はトピック外であり、すぐに閉鎖される可能性があります。 [ツアー](https://stackoverflow.com/tour)を完了し、[ヘルプセンター](https://stackoverflow.com/help)を読んで、このサイトの話題を理解することをお勧めします。 –

+0

Hackernewsには、戦闘員のSOがどのようになっているのかについてのコメントがたくさんありました。私はカスタムパーサーを書く前に既存のツールを再利用しようとしているので、なぜこれがトピックとは考えられないのか分かりません。UNIXにはたくさんのコマンドラインツールがあるので、人々がそれらのすべてを知ることを期待しないことは有効です。 – rottyguy

答えて

-1

特定のソリューションを推奨するのに十分な詳細で問題を指定していませんが、この種の問題を処理するツールとテクニックは多数あります。私はこれを理解したよう

は、あなたが

  1. クラス
  2. 内のメソッドを識別し、あなたのクラスの境界を特定し、特定のテキストの特徴

を欠く方法を削除したいマイこれに対する一般的なアプローチは、 "古い古いファイルと新しいファイルを開いたり、古いファイルから読み込んだものすべてを書き出したりしない限り、論理を持つスクリプトになります。

クラスに入る(1つのフラグ)とメソッド(別のフラグ)を見つけることを開始するまでblithelyことを書くことができます。ここでやや難しいのは、バッファリングです。ターゲットテキストが含まれているかどうかを知るまで、各メソッドのテキストを保持する必要があります。メソッド全体を読み込み(マイナー解析タスク)、ターゲットを検索するか、ターゲットを見つけて(write-it-allモードに戻る)、最後に実行するまで空白を空にしますバッファは書き込みなし)。

これは、問題を処理するための任意の便利な言語でスクリプトをコブルするだけで十分です。 UNIXにはさまざまなツールが用意されています。 そののパラダイム私はawkを使用したいと思います。しかし、私はPythonやPerlのような読みやすいツールを勧めます。正式な構文解析の世界に移行したいのであれば、Lex-YACCの簡単な対処法をお勧めします。非常にシンプルなトークン(コーディングスタイルによっては完全な行でさえ)とアクション(行の書込み、行の保持、ステータスの設定フラグ、バッファをフラッシュするなど)。

移動するには十分ですか?

+0

ありがとうございました。うん、私はカスタムパーサーを書く方法を知っている(と私はこれを言及すべきである)、私はコードを書く前にこれを行うために使用できるいくつかのコマンドラインツールがあるのだろうかと思っていた。 – rottyguy

+0

コマンドラインフィルタほど単純ではありません。 ** awk **は最も直接的な解決策かもしれませんが、パターン=>アクション構文が分かっていなければ、最も効果的な解決策にはなりません。 – Prune

関連する問題