首页 > 解决方案 > 在 Python 中循环 ConfigParser 时,如何停止重复不需要的值?

问题描述

我正在尝试使用 configParser 上传 .ini 文件。一切都运行良好,直到我进入一个嵌套循环。我试图在每个文件中找到键值,然后在该文件的每个部分中,并打印出键对值。

for i in iniFiles:
    config.read(i)        
    for j in config.sections():
        if config.has_option(j, description):
            print(j + ':', config[j][description])

在示例中,iniFiles是一个字符串列表,其中包含我要查看的每个文件的路径。description是我要搜索的关键。我不断循环浏览几个不同的文件,无论出于何种原因,当我打印出它们的键值时,其中一个文件不断重复。这是为什么?

标签: pythonloopsconfiginiconfigparser

解决方案


config.read 函数不像你想象的那样工作。它处理您指定的文件,但会将结果与解析器的现有内容合并。它不会重新初始化解析器的内容。因此,如果您像在这里一样解析多个文件,每个新文件只会将其内容与解析器的现有状态合并。你认为它一遍又一遍地读取同一个文件,但它并没有这样做。它只是保留所有以前的结果。

简单的解决方案是一次读取所有文件,然后在单独的循环中进行打印。或者,您可以为每个文件创建一个新的(因此为空的)ConfigParser 实例。我不知道哪种解决方案最适合您。

仅供参考,读取功能可以一步处理文件名列表,这将消除您的外部循环。阅读该功能的文档。


推荐阅读