Python: Pythonic 导入具有特定标识符的所有变量的方法?

Python: Pythonic way to import all variables with a specific identifier?

我想将名称中包含“_COLUMN”的文件中的所有变量整齐地导入。我这样做是因为有 20 多个变量,并且 normal 导入语句会很大。我还希望可以直接访问变量,例如TIME_COLUMN 而不是 earthquakes.tools.TIME_COLUMN

以下代码有效:

import earthquakes.tools    
for item in dir(earthquakes.tools):
    if '_COLUMN' in item:
        exec(f'from earthquakes.tools import {item}')

这被认为是 Pythonic 吗?如果没有,是否有更好的方法或者甚至不应该这样做?

有关信息,我尝试在导入语句和其他解决方案中搜索正则表达式,但没有找到任何重要信息。

请不要提及 from ... import * 因为它不被认为是 Pythonic

你可以使用这个技巧

from earthquakes.tools import *

您可以覆盖模块的 __all__ 变量:

tools.py

__all__ == ['var1_COLUMN', 'var2_COLUMN', 'var3_COLUMN']

main.py:

from earthquakes.tools import *

了解更多:Importing * From a Package

所有 _COLUMN 前缀的变量可能首先应该是 dict,但是如果您自己不能在 earthquake.tools 中这样做,您可以构建一个本地变量一个使用 getattr.

import earthquake.tools


column_names = ["foo", "bar", "baz", ...]

columns = {k: getattr(earthquake.tools, f'{k}_COLUMN') for k in column_names}

不要使用 dir 来“推断”列名。如果不知道 earthquake.tools 首先定义了什么,阅读 scipt 的人不会知道定义了什么变量,所以要明确并列出您 期望 使用的名称。 (创建一个您永远不会实际使用的变量是没有意义的。)