从python列表中的名称(字符串)访问对象属性

时间:2019-02-21 10:48:55

标签: python pandas attributes

我正在运行一个python脚本,该脚本在遍历多个目录后会生成多个变量。脚本运行后,我想对名称与特定模式匹配的几个数据帧执行一些操作:

failed_runs_finder = re.compile(r'FAILEDRuns_') # pattern to search
list_dfs = list(filter(failed_runs_finder.findall, dir())) # puts the matching results in a list

哪个给我一个列表,如下所示:

['FAILEDRuns_0112',
 'FAILEDRuns_0121',
 'FAILEDRuns_0126',
 'FAILEDRuns_0129',
 'FAILEDRuns_0131',
 'FAILEDRuns_0134',
 'FAILEDRuns_0135',
 'FAILEDRuns_0137',
 'FAILEDRuns_0142',
 'FAILEDRuns_0153',
 'FAILEDRuns_0165',
 'FAILEDRuns_0171',
 'FAILEDRuns_0175']

如果我现在尝试使用list_dfs方法通过以下循环访问shape()中每个元素的行数和列数:

for i in list(filter(failed_runs_finder.findall, dir())):
    print(getattr(i, 'shape'))

我得到:

AttributeError: 'str' object has no attribute 'shape'

这是因为错误提示,list_dfs中的元素是字符串,而不是数据帧本身。

然后我的问题是如何通过列表中的对象名称访问对象本身?

2 个答案:

答案 0 :(得分:0)

不确定我想对的事情做对了,但是您可以使用字典将字符串与数据框映射,例如:

{'FAILEDRuns_0112': FAILEDRuns_0112}

答案 1 :(得分:0)

这应该可以解决问题:

for i in list(filter(failed_runs_finder.findall, dir())):
    print(locals()[i].shape)