使用Python的ConfigParser读取INI文件无法获取更新值
解决ConfigParser读取不到INI文件更新值的问题
这问题我之前也碰到过!核心原因就是ConfigParser会把配置内容缓存到内存中,你第一次调用Config.read()后,它就默认用内存里的旧数据,哪怕后续INI文件已经被修改,它也不会主动去重新读取文件内容——除非你明确告诉它这么做。
问题根源
你的代码应该是在程序启动时只调用了一次Config.read("vSSF_MCC_GR.INI"),之后每次循环执行时,直接用的是内存里缓存的初始配置,完全没去读已经更新的文件。
两种可行的解决方案
方案1:每次执行前重新创建ConfigParser实例
每次循环都新建一个ConfigParser对象,然后读取文件,这样肯定能拿到最新的内容:
import configparser import time while True: # 每次循环都创建新的ConfigParser实例 config = configparser.ConfigParser() # 重新读取INI文件 config.read("vSSF_MCC_GR.INI") print('Config Sections Are during execution:-', config.sections()) # 这里执行你的保存逻辑,比如修改配置后写入文件 # config['YourSection']['YourKey'] = 'UpdatedValue' # with open("vSSF_MCC_GR.INI", 'w') as f: # config.write(f) time.sleep(60)
方案2:复用同一个实例,但每次读取前清空缓存
如果不想每次都新建对象,可以先清空当前ConfigParser里的所有配置,再重新读取文件:
import configparser import time # 初始化一次ConfigParser config = configparser.ConfigParser() while True: # 清空内存中的旧配置 config.clear() # 重新读取文件内容 config.read("vSSF_MCC_GR.INI") print('Config Sections Are during execution:-', config.sections()) # 执行保存逻辑 # ... time.sleep(60)
为什么原来的写法不行?
ConfigParser的read()方法是增量式读取——它会把读取到的新配置和已经在内存中的配置合并,而不是覆盖。如果文件里的配置项没有删除,只是修改了值,内存里的旧值不会被替换,所以你读取到的还是初始值。
内容的提问来源于stack exchange,提问作者Vishal Mishra
相关产品推荐
相关产品推荐

