首页 > 解决方案 > 从目录中的每个 .py 文件导入和测试变量

问题描述

我试图从目录中的每个 python 文件中导入和测试变量“builtin”。它应该遍历每个文件并测试变量,如果变量设置为 true,那么它将文件名添加到列表中。如果文件没有“内置”变量,它也应该能够工作。目前,我的代码正在将每个文件添加到列表中,包括带有和不带有变量的文件。我怎样才能解决这个问题?这是我的代码:

def getDefaults(folder):
    if folder == "plugins":
        files = os.listdir("plugins")
        defaults = []
        for file in files:
            try:
                exec("from plugins." + file[:-3] + " import builtin")
                if file[:-3].builtin == "True":
                    defaults.append(file)
            except:
                pass
        return defaults

标签: pythonvariablesimport

解决方案


保留一个全局变量并将该变量分配给 exec 语句中的内置变量。

import os

cur_builtin = None
def getDefaults(folder):
    if folder == "plugins":
        files = os.listdir("plugins")
        defaults = []
        for file in files:
            try:
                exec("global cur_builtin; from plugins." + file[:-3] + " import builtin; cur_builtin = builtin")
                if cur_builtin == "True":
                    defaults.append(file)
            except:
                pass
        return defaults


print (getDefaults("plugins"))

测试-

# code in filter_builtin.py
mkdir plugins
cd plugins
echo builtin = '"True"' >> sample1.py
echo builtin = '"True"' >> sample2.py
echo builtin = '"True"' >> sample3.py
echo builtin = '"False"' >> sample4.py
cd ..
python filter_builtin.py

推荐阅读