Python从不同文件夹以编程方式导入同名文件

0 投票
1 回答
1380 浏览
提问于 2025-04-16 20:51

我有以下的结构:

sites 
  - SiteA
    - Settings.py
  - SiteA
    - Settings.py
  - SiteA
    - Settings.py

所有的settings.py文件里都有一个变量:

DOMAIN_KEY = ''

有没有办法通过编程的方式导入这个结构,查看所有设置文件里的这个变量并打印出来呢?

编辑(更新的代码):

with cd(os.path.join(APPLICATION_DIR, 'config', 'sites')):
    output = run ("ls -l | grep \"^d\"|awk {'print $8'}") # run will execute and return list of folders
    for file in output.split():
        __module = __import__('%s' % file)
        print __module
        print __module.TIME_ZONE
        print __module.SITE_ID

导入没有正常工作,我不太确定如何在不知道文件夹名称的情况下导入设置文件。

1 个回答

0

假设你没有重复的文件名,你可以这样访问这些模块和它们的变量:

import SiteA.Settings as A, SiteB.Settings as B, SiteC.Settings as C
print(A.DOMAIN_KEY, B.DOMAIN_KEY, C.DOMAIN_KEY)

编辑:还有一个选择是使用 __import__() 语句,这个语句可以让你通过模块的名字来加载它:

for char in "ABC":
    mod = __import__("Site%c.Settings")
    print(mod.DOMAIN_KEY)

编辑2:根据原帖的更新。

你为什么不在脚本中获取的文件夹后面直接加上“Settings”模块的名字呢?

for file in output.split():
    __module = __import__('%s.Settings' % file)
    print __module.Settings.DOMAIN_KEY

撰写回答