gpt4 book ai didi

python - 检查是否在多个脚本中设置了变量

转载 作者:行者123 更新时间:2023-11-28 18:28:48 26 4
gpt4 key购买 nike

我有一个 python 模块,里面有很多 python 脚本,我想阅读这些脚本并检查是否设置了变量。

我目前正在逐行读取文件,但由于我正在读取的脚本是用 python 编写的,我猜是否有更好的方法?

for filename in glob.glob(os.path.join(my_path, '*.py')):
with open(filename) as f:
for line in f:
if 'my_variable' in line:
variable_exists = True

编辑

我有一个包含很多类的目录,其中一些包含影响脚本运行方式的变量。例如

class Script1():
name = 'script1'
countrys = ['US', 'UK', 'AU']

class Script2():
name = 'script2'
countrys = ['US', 'CA']

由此我想实现

[
{'name': 'script1', 'country': 'US'},
{'name': 'script1', 'country': 'UK'},
{'name': 'script1', 'country': 'AU'},
{'name': 'script2', 'country': 'US'},
{'name': 'script2', 'country': 'CA'}
]

最佳答案

这是您的问题的一个工作示例:

import glob
import inspect
import os
import sys
import importlib


def get_classes(module):
def pred(c):
if inspect.isclass(c) and hasattr(c, "countrys"):
return True
return False

for value in inspect.getmembers(module, pred):
yield value


def list_plugins(search_paths, my_path):
output = set()

for path in search_paths:
sys_path = list(sys.path)
sys.path.insert(0, path)

for f in glob.glob(my_path):
print f
location, ext = os.path.splitext(f)
mod_name = os.path.basename(location)

mod = importlib.import_module(mod_name)
print os.path.abspath(mod.__file__)
for c in get_classes(mod):
output.add(c)

sys.path[:] = sys_path

return output


if __name__ == "__main__":
output = []

for p in list_plugins(["test"], os.path.join("test","*.py")):
name, plugin = p[0], p[1]

for c in plugin.countrys:
output.append({
'name': name,
'country': c
})

print output

一些评论,为了让它工作,在同一个脚本的文件夹中创建一个名为 test 的文件夹,其中包含一个空的 __init__.py 文件和一个(或多个)python 文件与您在问题中提到的类(class)。

代码的重要部分是 import_module 的用法和 inspect

这是一个小例子,但对您来说应该是一个很好的起点。希望对您有所帮助。

关于python - 检查是否在多个脚本中设置了变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39097416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com