从AST获取所需格式的输出

时间:2018-07-06 06:26:44

标签: python python-3.x abstract-syntax-tree

这是关于从python ast获取所需输出的问题。首先,让我展示我正在使用python ast模块解析的代码。如下图所示。

for

现在,我正在使用ast中的以下代码来从代码中获取信息,尤其是使用nodevisitor。

a = (3>> 4) | (5>6) 
#checks = ([3,4,5] > [1,2,3]) & (['a',b,2.3] > ['a',c,3.2,3])
bro = "hehe"
b = OneHotEncoding('x,y')
b.fit()
b.transform()
b.fit_transform()


# Path has been given to you already to use in function.
path = "./data/ipl_dataset.csv" #path to the csv file

a = np.zeros((1, 2, 3))
b = np.ones((1, 3, 4))
c = np.sum(c)
#x1, x2 = (0, 1)
m1,m2 = [np.zeros(),1.2,[pd.read_csv(),2]]
# random.shuffle(m)

#y1, y2 = a, b

a = (1,(1,2))
z1, z2 = [2, 4]

# m1, m2 = np.zeros(2), np.ones(4)

# m11, m12 = (np.zeros(2), np.ones(4))

son = {"dd": '4', "mm":[1,2,3]}

还有一个辅助函数,它将返回如下的所有分配。

class allnames(ast.NodeVisitor):
def __init__(self):
    self._name = []
    self._imports = []

@property
def name(self):
    return self._name
@property
def imports(self):
    return self._imports

def visit_Name(self,node):
    self._name.append(node.id)


def visit_Attribute(self, node):
    try:

        self._name.append(node.value.id+'.'+node.attr)

    except AttributeError:
        self.generic_visit(node)

def visit_Num(self,node):
    self._name.append(node.n)

def visit_Str(self,node):
    self._name.append(node.s)

使用此方法部分解决了我的问题,但未获得所需格式的所有分配和目标。例如,它不捕获ast.BinOp。让我们看一下在这种情况下获得的输出。

def get_all_assigns(tree):
func_calls = []
for node in ast.walk(tree):
    if isinstance(node, ast.Assign):
        callvisitor = allnames()
        callvisitor1 = allnames()
        callvisitor1.visit(node.targets[0])

        callvisitor.visit(node.value)
        func_calls.append([callvisitor.name,callvisitor1.name])

return func_calls
我们先来看两件事,首先是在代码中第32行的名为son的字典,该字典经过解析以获得输出。它具有键dd,mm,其中与键dd相关的值是str,而kk是列表[1,2,3]。在这种情况下,我想获取具有相应值的键值作为值[dd,'4']和[mm,[1,2,3]]也想捕获BinOp,例如在=(3 >> 4)| (5> 6)。如何添加visit_Dict和visit_BinOp以获得这些值?

提前感谢您的回答

0 个答案:

没有答案