You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中通过正则表达式筛选导入指定前缀的变量?

如何在Python中通过正则表达式筛选导入指定前缀的变量?

嗨,我完全懂你的需求——你在script_load.py里定义了上百个变量,只想导入符合特定正则规则的(比如以COLOUR开头的那些),既不想一个个手动列出来,也不想用import *把所有变量都拉进来,避免命名冲突或者冗余。可惜Python的静态import语法确实不支持直接用正则表达式筛选导入内容,你之前写的from script_load import r'^COLOUR.+$'会触发语法错误,因为import语句只接受明确的变量名或者通配符*。

不过别担心,我们有几种可行的办法来实现你的需求:


方法一:在script_load.py中自动生成导出列表(推荐)

你可以在script_load.py的末尾加一段代码,自动收集符合正则规则的变量并赋值给__all__变量。Python的from module import *会严格遵循__all__里的列表导入变量,这样你用from script_load import *时,就只会导入你想要的变量了。

修改后的script_load.py:

import os
import re
from configparser import ConfigParser

file = os.path.join(os.getcwd(), 'file.txt')
fparser = ConfigParser()
fparser.read(file)
COLOUR_ONE = fparser.get("GENERAL", "Green")
COLOUR_TWO = fparser.get("GENERAL", "Red")
COLOUR_THREE = fparser.get("GENERAL", "Blue")
BUILDING_ONE = fparser.get("GENERAL", "House")
BUILDING_TWO = fparser.get("GENERAL", "School")
BUILDING_THREE = fparser.get("GENERAL", "Supermarket")

# 自动收集所有以COLOUR开头的变量到导出列表
__all__ = [name for name in dir() if re.match(r'^COLOUR.+$', name)]

对应的script_main.py写法:

from script_load import *

def function():
    print(COLOUR_ONE + COLOUR_TWO + COLOUR_THREE)

这样就只会导入以COLOUR开头的变量,不会把BUILDING相关的也带进来。之后如果要调整筛选规则,只要修改script_load.py里的正则表达式就行,非常灵活。


方法二:在script_main.py中动态筛选导入

如果你不想修改script_load.py,可以在script_main.py里动态导入整个模块,然后遍历模块的属性,把符合正则规则的变量注入到当前脚本的全局命名空间中:

修改后的script_main.py:

import re
import script_load

# 遍历script_load的所有属性,筛选符合规则的变量并注入当前全局空间
for name in dir(script_load):
    if re.match(r'^COLOUR.+$', name):
        globals()[name] = getattr(script_load, name)

def function():
    print(COLOUR_ONE + COLOUR_TWO + COLOUR_THREE)

这段代码会先导入整个script_load模块,然后逐个检查模块的属性名,把符合^COLOUR.+$规则的变量引用赋值到当前脚本的全局变量中,这样你之后就能直接使用COLOUR_ONE这类原变量了,完全不需要创建新变量。


补充:为什么你的原写法会报错?

再简单解释下:Python的import是静态语法,在代码执行前就会被解析,它不支持把动态表达式(比如正则字符串)作为导入的名称。所以你不能直接在import语句里写正则,必须用动态导入的方式或者提前定义好导出列表来实现筛选。

备注:内容来源于stack exchange,提问作者luisito_36

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:12:58