这是关于从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以获得这些值?
提前感谢您的回答