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

在python中从列表中的名称(字符串)访问对象属性,python,pandas,attributes,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 这给了我一个列表,如下所示: ['FAI

我正在运行一个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']
如果我现在尝试通过以下循环使用
shape()
方法访问
list\u dfs
中每个元素的行数和列数:

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

AttributeError: 'str' object has no attribute 'shape'
这是因为正如错误所暗示的那样,
列表中的元素是字符串,而不是数据帧本身


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

不确定我是否正确选择了要执行的操作,但您可以使用dict将字符串映射到数据帧,例如:

{'FAILEDRuns_0112': FAILEDRuns_0112}

不确定我是否正确地理解了您想要做的事情,但您可以使用dict将字符串映射到数据帧,例如:

{'FAILEDRuns_0112': FAILEDRuns_0112}

这应该可以做到:

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

这应该可以做到:

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

如果要使用
shape
方法,首先需要将每个文件作为数据帧加载到内存中。在我运行脚本后,它们都已加载到内存中。如果您在脚本的前面已经将所有文件作为数据帧加载,则可以创建一个dict(),其中键是文件名,值是df。在这种情况下,如果要使用
shape
方法,可以在失败的\u运行列表中为i运行一个循环:print(df\u dict[i].shape)
,您首先需要将每个文件作为数据帧加载到内存中。在我运行脚本后,它们都已加载到内存中。如果您在脚本前面已经将所有文件作为数据帧加载,则可以创建一个dict(),其中键是文件名,值是df。在这种情况下,您可以运行一个循环,例如
for i in list\u of_failed\u runs:print(df_dict[i].shape)
,这很有帮助,尽管我现在正在尝试如何构建字典iteratively@BCArg您当前如何加载dfs?在目录/文件路径上迭代并运行pd.read_csv()(或任何文件类型)?@cvonsteg:所有感兴趣的数据帧和其他对象都是在我运行python脚本后创建的,这就是为什么在调用
dir()
时会出现它们的原因。这很有帮助,虽然我现在正试图弄清楚我该如何建立字典iteratively@BCArg您当前如何加载dfs?在目录/文件路径上迭代并运行pd.read_csv()(或任何文件类型)?@cvonsteg:所有感兴趣的数据帧和其他对象都是在运行python脚本后创建的,这就是为什么在调用
dir()
时会出现它们。