Python 全局变量 configparser

读配置文件,而不是将配置写在代码里,将有助于在其他环境对任务调用时,避免使用的不是同一个$PYTHONPATH环境变量造成一些import导包问题,例如Dolphinscheduler调度import 自定义包时。而读文件可以写服务器上的全路径名,解决了此类问题。

当你想要在Python中读取一个配置文件并将其配置设置为全局变量时,你可以使用configparser模块。以下是一个简单的例子,假设你的配置文件是一个INI文件格式:

首先,创建一个配置文件(例如,config.ini):

[Settings]
key1 = value1
key2 = value2
key3 = value3

然后,使用以下Python代码读取并设置全局变量:

import configparser

# 创建 ConfigParser 对象
config = configparser.ConfigParser()

# 读取配置文件
config.read('config.ini')

# 获取配置值并设置为全局变量
global_var_key1 = config.get('Settings', 'key1')
global_var_key2 = config.get('Settings', 'key2')
global_var_key3 = config.get('Settings', 'key3')

# 打印全局变量(可选)
print(f"global_var_key1: {global_var_key1}")
print(f"global_var_key2: {global_var_key2}")
print(f"global_var_key3: {global_var_key3}")

在这个例子中,configparser模块用于读取配置文件,然后通过get方法获取各个配置项的值,并将其设置为全局变量。你可以根据实际需要修改配置文件的路径和变量名称。这样,你就可以在整个程序中访问这些全局变量了。


此外,如果需要再 config.ini 里任然使用 configparser 来添加一个动态变量

[Settings]
# TODO 日期
today = datetime.now().strftime('%Y%m%d')
yesterday = ((datetime.strptime(datetime.now().strftime('%Y%m%d'), '%Y%m%d')) - timedelta(days=1)).strftime('%Y%m%d')
this_month_to_last_week_filename = datetime.now().date().strftime('%Y年%m月份最新医生活跃人次(截止上周且最大4次)')

运行时 configparser 会报错

ConfigParser.InterpolationSyntaxError: '%' must be followed by '%' or '(', found: "%&'"

这是因为 % 已经在 configparser 的低版本里有意义了,可以作为变量替换 %() 使用,所以会导致语法冲突。

解决办法是,新版 Python 3.2的 configparser 里,可以取消插值来构造函数。改成下面这句即可,

configParser = configparser.ConfigParser(interpolation=None)

或者是选择使用 RawConfigParser ,而非使用 ConfigParser,也可解决。

import codecs
import configparser
from datetime import datetime, timedelta

# 创建 ConfigParser 对象
config = configparser.ConfigParser(interpolation=None)

# 读取配置文件,使用 utf-8-sig 编码可以支持读中文编写的 config.ini
config.read_file(codecs.open('config.ini', "r", "utf-8-sig"))

# 获取配置值并设置为全局变量
global_var_key1 = config.get('Settings', 'key1')
global_var_key2 = config.get('Settings', 'key2')
global_var_key3 = config.get('Settings', 'key3')
global_var_today = eval(config.get('Settings', 'today'))
global_var_yesterday = eval(config.get('Settings', 'yesterday'))
global_var_this_month_to_last_week_filename = eval(config.get('Settings', 'this_month_to_last_week_filename'))

# 打印全局变量(可选)
print(f"global_var_key1: {global_var_key1}")
print(f"global_var_key2: {global_var_key2}")
print(f"global_var_key3: {global_var_key3}")
print(f"global_var_today: {global_var_today}")
print(f"global_var_yesterday: {global_var_yesterday}")
print(f"global_var_yesterday: {global_var_this_month_to_last_week_filename}")

参考:

ConfigParser的%问题
https://stackoverflow.com/questions/14340366/configparser-and-string-with
RawConfigParser使用 https://docs.python.org/3/library/configparser.html#rawconfigparser-objects

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunTecTec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值