私は、ユーザーがpythonモジュールを含むフォルダを参照できるようにするプログラムを構築しようとしています。フォルダが選択されると、そのフォルダ内のすべてのPythonファイル、および各モジュールのすべてのクラスとメソッドが一覧表示されます。私の質問は、各ファイルを開き、 "def"または "class"を解析することなくこれを行うことができる方法はありますか?クラスの属性を返すmroという関数があることに気付きましたが、それはインポートを介してそのクラスにアクセスする必要があります。それで私は同じ結果を得ることができる方法はありますか?前もって感謝します!すべてのメソッドとクラスのpythonファイルの解析
答えて
これは私がASTモジュールを使用して思いついたもので、私が探していたものです。私はここに、私のモジュールの一つで多くのコードを交換しなければならなかった
def fillClassList(file):
classList = []
className = None
mehotdName = None
fileName = "C:\Transcriber\Framework\ctetest\RegressionTest\GeneralTest\\" + file
fileObject = open(fileName,"r")
text = fileObject.read()
p = ast.parse(text)
node = ast.NodeVisitor()
for node in ast.walk(p):
if isinstance(node, ast.FunctionDef) or isinstance(node, ast.ClassDef):
if isinstance(node, ast.ClassDef):
className = node.name
else:
methodName = node.name
if className != None and methodName != None:
subList = (methodName , className)
classList.append(subList)
return classList
あなたはファイルの内容を知りたい場合は、周りのファイルを覗く方法はありません:)
あなたの選択は、ダウンあなたは、コンテンツの関心自身、または場合を解析するかどうかに来ますPythonにファイルをロードさせ、見つかったものについてそれを尋ねる必要があります。 (:ない弱い胃とのそれらのための警告):
testme.py:
class Foo (object):
pass
def bar():
pass
analyze.pyあなたはこのような何かを行うことができます下のtestme.pyのような非常に単純なPythonのファイルについては
:
import os.path
files = ['testme.py']
for f in files:
print f
modname = os.path.splitext(f)[0]
exec('import ' + modname)
mod = eval(modname)
for symbol in dir(mod):
if symbol.startswith('__'):
continue
print ' ', symbol, type(eval(modname + '.' + symbol))
出力:
testme.py
Foo <type 'type'>
bar <type 'function'>
しかし、それはネストされたパッケージやモジュール、壊れたコードを扱うために展開するとかなりうまくいくでしょう。 grep
のclass
とdef
のほうが簡単で、そこから行くことができます。
お楽しみください!私は:心臓:メタプログラミング
Pythonは "exec"や "eval"よりも優れたソリューションを提供しています。 ... –
私は胃が弱い人ではないと言っていました:) –
「脳にいる人にとってはそうではありません」という意味ですか? –
ほとんどのPythonの実装(パーサーが含まれています)はstdlibで利用できるので、慎重にmodules indexを読むことで、必要なものを見つけることができます。気になる最初のモジュール/パッケージはimportlib、inspect、astですが、確かに他の関心のあるモジュールです。
@Tedあなたの記事にこのコードを投稿してくださいあなたはそれを編集することができます) - コメントでは、それはただ読めません。 –
私の悪い、私はそれを投稿したが、私はそれを変更するために5分待つ必要があったと私はそれについて忘れていた:Pしかし、私はすでに下に行った – Ted
は、クラスやメソッドを取得するための私の方法です:
def listClass(file):
with open(file,"r") as f:
p = ast.parse(f.read())
# get all classes from the given python file.
classes = [c for c in ast.walk(p) if isinstance(c,ast.ClassDef)]
out = dict()
for x in classes:
out[x.name] = [fun.name for fun in ast.walk(x) if isinstance(fun,ast.FunctionDef)]
return out
サンプルpprint出力:
{'Alert': ['__init__',
'fg',
'fg',
'bg',
'bg',
'paintEvent',
'drawBG',
'drawAlert'],
'AlertMouse': ['__init__', 'paintEvent', 'mouseMoveEvent'],
'AlertPopup': ['__init__', 'mousePressEvent', 'keyPressEvent', 'systemInfo']}
- 1. 解析するクラス構造Pythonのファイルからのデータ
- 2. jsonファイルの解析 - Python
- 3. ディレクトリとすべてのサブディレクトリ内のすべてのXMLファイルを解析する
- 4. Pythonの.isoファイルを解析する
- 5. PYTHONのrss xmlファイルの解析
- 6. Pythonリストの理解とJSONの解析
- 7. すべてのメソッドとクラスを追跡
- 8. PythonとBeautifulSoup URLの解析
- 9. データの解析JSONとPython
- 10. PHPすべての.mp3リンクのXMLファイルを解析します
- 11. Python - 設定ファイル - フロー制御の解析
- 12. Python - 最適化ファイルの解析
- 13. 解析のcsvファイルとC#
- 14. Swiftファイルを解析してその中のすべてのメソッドを抽出するシェルスクリプト
- 15. Pythonクラスとメソッドの説明
- 16. pythonクラスのメソッドと継承
- 17. Java - 解析メソッド他のクラスへの呼び出し
- 18. クラスとメソッドpython
- 19. 解析\ - のpython 2.7.3
- 20. ログファイルの解析Python
- 21. 解析CDATAのpython
- 22. 解析Pythonのキューオブジェクト
- 23. 解析式 - Pythonの
- 24. PythonのXML解析
- 25. json pythonの解析
- 26. 解析XMLは、すべての
- 27. python - threading.Threadクラスですべてのメモリを解放しますか?
- 28. pythonを使ってこのファイルを解析するには?
- 29. Pythonでのループと.jsonの解析
- 30. すべてのjsonオブジェクトを解析してクラス内に送信するには?
あなた可能性'__init __。py'ファイルをフォルダに入れてモジュールとしてロードしてください。こちらをご覧ください:https://docs.python.org/2/tutorial/modules.html#packages – jojo