python读取多个ini文件,打印出来的结果不相同(已经解决)

各位大佬好,小弟学习ini读取时遇到以下问题。

# 导包
import configparser
import os, sys

config = configparser.ConfigParser(strict = False) # 类实例化

# 获取文件夹中的文件列表

names = [name for name in os.listdir('./1') 
        if os.path.isfile(os.path.join('./1/', name))]

display2s=[]

#获取文件路径
for filename in names:
    filepath="./1/"+filename
    print(filepath)

    config.read(filepath, encoding="GBK")
    a=config.options("显示器")
    print(a)

    if "显示器2|显示器属性|型号"  in config.options("显示器"):
        display2s.append(config["显示器"]["显示器2|显示器属性|型号"])
    else:     
        display2s.append('无')


print(display2s)

###以下是ini文件内容

####1.ini文件

[显示器]

显示器1|显示器属性|显示器名称=通用即插即用监视器 [NoDB]
显示器1|显示器属性|显示器 ID=DEL2011
显示器1|显示器属性|型号=DELL D2421H
显示器1|显示器属性|制造日期=37/ 2020
显示器1|显示器属性|序列号=BMR1K33
显示器1|显示器属性|最大可用屏幕=527 mm x 296 mm (23.8")
显示器1|显示器属性|图像宽高比=16:9
显示器1|显示器属性|水平扫描频率=30 - 83 kHz
显示器1|显示器属性|垂直扫描频率=56 - 76 Hz
显示器1|显示器属性|最大像素频率=170 MHz
显示器1|显示器属性|伽马值=2.20
显示器1|显示器属性|支持电源管理模式(DPMS)=Active-Off

####2.ini文件

[显示器]

显示器1|显示器属性|显示器名称=Dell UltraSharp U2312HM (Digital)
显示器1|显示器属性|显示器 ID=DEL4072
显示器1|显示器属性|型号=DELL U2312HM
显示器1|显示器属性|显示器类型=23" LCD (FHD)
显示器1|显示器属性|制造日期=29/ 2012
显示器1|显示器属性|序列号=TPXG727IH4QL
显示器1|显示器属性|最大可用屏幕=510 mm x 287 mm (23.0")
显示器1|显示器属性|图像宽高比=16:9
显示器1|显示器属性|亮度=300 cd/m2
显示器1|显示器属性|对比度=1000:1
显示器1|显示器属性|视角=178/178
显示器1|显示器属性|接口类型=DSub, DVI-D, DisplayPort
显示器1|显示器属性|水平扫描频率=30 - 83 kHz
显示器1|显示器属性|垂直扫描频率=56 - 76 Hz
显示器1|显示器属性|最大像素频率=170 MHz
显示器1|显示器属性|最大分辨率=1920 x 1080
显示器1|显示器属性|伽马值=2.20
显示器1|显示器属性|支持电源管理模式(DPMS)=Standby, Suspend, Active-Off


显示器2|显示器属性|显示器名称=通用即插即用监视器 [NoDB]
显示器2|显示器属性|显示器 ID=DEL40DD
显示器2|显示器属性|型号=DELL UP2716D
显示器2|显示器属性|制造日期=20/ 2017
显示器2|显示器属性|序列号=N3JWH75G248L
显示器2|显示器属性|最大可用屏幕=597 mm x 336 mm (27.0")
显示器2|显示器属性|图像宽高比=16:9
显示器2|显示器属性|水平扫描频率=30 - 88 kHz
显示器2|显示器属性|垂直扫描频率=50 - 75 Hz
显示器2|显示器属性|最大像素频率=250 MHz
显示器2|显示器属性|伽马值=2.20
显示器2|显示器属性|支持电源管理模式(DPMS)=Active-Off

####3.ini文件

[显示器]

显示器1|显示器属性|显示器名称=Dell UltraSharp U2312HM (Digital)
显示器1|显示器属性|显示器 ID=DEL4072
显示器1|显示器属性|型号=DELL U2312HM
显示器1|显示器属性|显示器类型=23" LCD (FHD)
显示器1|显示器属性|制造日期=29/ 2012
显示器1|显示器属性|序列号=TPXG727IH4QL
显示器1|显示器属性|最大可用屏幕=510 mm x 287 mm (23.0")
显示器1|显示器属性|图像宽高比=16:9
显示器1|显示器属性|亮度=300 cd/m2
显示器1|显示器属性|对比度=1000:1
显示器1|显示器属性|视角=178/178
显示器1|显示器属性|接口类型=DSub, DVI-D, DisplayPort
显示器1|显示器属性|水平扫描频率=30 - 83 kHz
显示器1|显示器属性|垂直扫描频率=56 - 76 Hz
显示器1|显示器属性|最大像素频率=170 MHz
显示器1|显示器属性|最大分辨率=1920 x 1080
显示器1|显示器属性|伽马值=2.20
显示器1|显示器属性|支持电源管理模式(DPMS)=Standby, Suspend, Active-Off


显示器2|显示器属性|显示器名称=通用即插即用监视器 [NoDB]
显示器2|显示器属性|显示器 ID=DEL40DD
显示器2|显示器属性|型号=DDDDDELL UP2716D
显示器2|显示器属性|制造日期=20/ 2017
显示器2|显示器属性|序列号=N3JWH75G248L
显示器2|显示器属性|最大可用屏幕=597 mm x 336 mm (27.0")
显示器2|显示器属性|图像宽高比=16:9
显示器2|显示器属性|水平扫描频率=30 - 88 kHz
显示器2|显示器属性|垂直扫描频率=50 - 75 Hz
显示器2|显示器属性|最大像素频率=250 MHz
显示器2|显示器属性|伽马值=2.20
显示器2|显示器属性|支持电源管理模式(DPMS)=Active-Off

正常情况输出结果,1.ini文件中不存在显示器2内容,打印出无。
python读取多个ini文件,打印出来的结果不相同

将1.ini改为4.ini时,4.ini文件中不存在显示器2内容,会打印出上一个ini文件的显示器2的值。

python读取多个ini文件,打印出来的结果不相同
如何正确的输出结果?
以上是我的问题,查看搜索引擎、参考文档无果,故只能麻烦各位大佬。

Jason990420
最佳答案

只使用一个实例, 读取INI文件

  • 读取1.ini时, 没有"显示器2|显示器属性|型号";
  • 读取4.ini时, 因在读取3.ini时已有"显示器2|显示器属性|型号", 所以即使4.ini中无该项, 但结果早已存在.

如果各文件要单独处理, 必须使用不同的实例.

for filename in names:
    config = configparser.ConfigParser(strict = False) # 类实例化
3年前 评论
Mars_chen (楼主) 3年前
Jason990420 (作者) 3年前
讨论数量: 2
Jason990420

只使用一个实例, 读取INI文件

  • 读取1.ini时, 没有"显示器2|显示器属性|型号";
  • 读取4.ini时, 因在读取3.ini时已有"显示器2|显示器属性|型号", 所以即使4.ini中无该项, 但结果早已存在.

如果各文件要单独处理, 必须使用不同的实例.

for filename in names:
    config = configparser.ConfigParser(strict = False) # 类实例化
3年前 评论
Mars_chen (楼主) 3年前
Jason990420 (作者) 3年前

使用一个实例也没有问题的,每次读INI文件的时候,执行一下config.clear()将config上次读入的数据清空就OK了。

3年前 评论
Mars_chen (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!