动态读取多个源文件中的变量

时间:2016-09-15 07:42:31

标签: python

我有一个存储一些python源文件的目录(a_dir/*.py)。 每个* .py文件都有a_var个对象。

我希望在a_dir的同一目录下有一个脚本来构建包含所有a_var_list值的列表a_var

我的问题是循环遍历a_dir中的python源文件,临时加载每个模块并读取对象a_var以构建a_var值的python列表。

2 个答案:

答案 0 :(得分:1)

也许是这样的?

进口

import os
import sys
sys.path.append("a_dir")
a_list = []

for directory in os.walk("a_dir"): #should only iterate once
    for file in directory[2]:
        if file.split(".")[-1] == "py":
            module = __import__(".".join(file.split(".")[:-1]))
            if "a_var" in dir(module):
                a_list.append(module.a_var)

答案 1 :(得分:0)

如果您不想进行文本解析,可以尝试导入所有文件并访问a_var变量。为了实现这一点,您应该使用“着名的”

编写yor文件
if __name__ == '__main__':
    <code>

如果您没有使用该方法,最快的方法仍然是文件解析。我会使用类似下面的内容:

import glob
import re

results = []

avar_regex = re.compile(r'\s*a_var\s*=\s*(.*)\s*') 
# to define the regex it would be important to know a little bit
#+more about the variable you are looking for.

# glob can be used to create a list with all the file names
for f in glob.glob('a_dir/*.py'): 
    with open(f) as fc:
        while l in fc:
            match = avar_regex.match(l)
            if match:
                results.append(match.group(1))
                break