2016-09-15 15 views
-1

私はいくつかのpythonソースファイル(a_dir/*.py)を格納するディレクトリを持っています。 各* .pyファイルにはa_varオブジェクトがあります。複数のソースファイルから変数を動的に読み込みます

a_dirと同じディレクトリにスクリプトを作成して、a_varという値をすべて含むリストa_var_listを作成したいとします。

私はa_dirのpythonソースファイルをループし、各モジュールを一時的に読み込み、オブジェクトa_varを読み込んで、a_varの値のpythonリストを作成します。

+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

ディレクトリのa_varモジュールが定義されています。それを考慮してソリューションを編集します – Quack

関連する問題