2016-10-13 4 views
1

Iは、以下の文字列があると:コンバートASTノード

code = """ 
if 1 == 1 and 2 == 2 and 3 == 3: 
    test = 1 
""" 

次のコードは、ASTにその文字列に変換します。その後

ast.parse(code) 

私が持っているように木:私はif 1 == 1 and 2 == 2 and 3 == 3:

が、私はそれがトラバース行うことができます知っている文字列にオブジェクトat.Ifを変換する方法があるかどうかを知りたい

Module(body=[<_ast.If object at 0x100747358>]) 
    If(test=BoolOp(op=And(), values=[<_ast.Compare object at 0x100747438>, <_ast.Compare object at 0x100747a90>, <_ast.Compare object at 0x100747d68>]), body=[<_ast.Assign object at 0x100747e48>], orelse=[]) 

子供ノードですが、あまりにも複雑になってきています。

+2

'<'、子供のノードを通過する - それは私がそれを行う方法を知っている唯一の方法は、信頼できる試みを作るサードパーティのツールがあります – inspectorG4dget

+0

です、例えば['astor'](http://astor.readthedocs.io/ja/latest/) – AChampion

答えて

3

基本的にはコアのコードで、個別に再パッケージ化されたunparseライブラリを使用できます。

まず、ライブラリをインストールします。

pip install astunparse 

すると、すぐに戻ってソースを取得するには、それを通して、あなたのASTモジュールを実行します。だから、実行している:

import ast 
import astunparse 

code = """ 
if 1 == 1 and 2 == 2 and 3 == 3: 
    test = 1 
""" 

node = ast.parse(code) 

astunparse.unparse(node) 

ウィル出力:

'\nif ((1 == 1) and (2 == 2) and (3 == 3)):\n test = 1\n'