Python读取INI文件时无法匹配解析值的问题求助
问题解决:Python INI章节匹配返回None的排查与修复
核心问题根源
从内部门户获取的summary解析后得到的self.pbk,看似是目标数字字符串(如'101'),但实际包含不可见空白字符(空格、换行、制表符等),导致和INI文件中纯字符的章节名(如[101])无法匹配。手动赋值或写死字符串时没有这些隐藏字符,所以能正常匹配。
修复步骤
1. 解析字符串时去除空白
在mkpbk()方法中,对提取的字符串调用strip()方法,彻底清除前后空白:
# 原代码 p=str(summary.split('-')[1]) # 修改后 p=str(summary.split('-')[1]).strip()
2. 校验解析逻辑的合理性
你提供的summary值为"This is a summary 101",其中没有'-',此时split('-')[1]会抛出IndexError。如果实际场景中summary格式不固定,建议添加容错逻辑,比如通过空格分隔提取最后一个元素:
# 替代方案:提取summary末尾的数字部分 p = summary.split()[-1].strip()
3. 调试确认字符串精确内容
添加调试代码输出字符串的原始表示,快速定位隐藏字符:
# 在mkpbk()中赋值后添加 print(repr(self.pbk))
比如如果输出是' 101 ',就说明存在前后空格,验证了问题根源。
4. 额外容错:匹配时也清理INI章节名
如果INI文件的章节名可能存在意外空白,可以在匹配时也对章节名做去空白处理:
# 在getPbkInfo()的判断中修改 if pb.strip() == self.pbk:
修改后的完整代码示例
class Test(): def __init__(self): self.pbk = "" self.pbkinfo = "" def mkpbk(self): Info = othemodule.info('argument') summary = str(Info[1]['fields']['summary']) # 兼容带'-'和不带'-'的summary格式 if '-' in summary: p = summary.split('-')[1].strip() else: p = summary.split()[-1].strip() self.pbk = p # 调试用:输出字符串精确形式 print(repr(self.pbk)) def getPbkInfo(self): for pb in pbkini.sections(): if pb.strip() == self.pbk: self.pbkinfo = {'action': pbkini.get(pb, "action")} return self.pbkinfo # 匹配失败时返回默认值(可选) return {'action': 'default'}
内容的提问来源于stack exchange,提问作者rehan
相关产品推荐
相关产品推荐

