2016-09-15 2 views
-1

У меня есть каталог, в котором хранятся некоторые исходные файлы на языке python (a_dir/*.py). Каждый файл * .py имеет объект a_var.Динамически читаемые переменные из нескольких исходных файлов

Я хочу иметь сценарий в том же каталоге a_dir, чтобы построить список a_var_list, содержащий все значение a_var.

Мое, хотя и состоит в том, чтобы зацикливать исходные файлы python в a_dir, временно загружать каждый модуль и читать объект a_var, чтобы построить список python значения a_var.

+2

Какие подходы вы пробовали? Попробуйте модуль [glob] (https://docs.python.org/3/library/glob.html). –

+0

Пожалуйста, открепите, я отвечу на мой вопрос. –

ответ

0

Если вы не хотите выполнять синтаксический анализ текста, попробуйте импортировать все файлы и получить доступ к переменной a_var. Чтобы сделать это возможное, вы должны быть написаны йором файлов с помощью «известного»

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 
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) 
+0

Это приведет к повторному исполнению всех файлов python, если они не выполнены (как я уже упоминал в своем ответе ...) –

+0

У меня есть AttributeError: объект 'module' не имеет атрибута 'a_var' –

+0

ah, да это предполагает, что каждый модуль в каталоге имеет a_var. Я отредактирую решение для учетной записи для этого – Quack

Смежные вопросы