Python如何根据service id提取对应pmtpid和pidlist参数
问题排查与修复方案
现有代码的问题
- 按
:拆分整条记录后,所有键值对处于平级状态,当前逻辑仅能匹配输出包含输入service id的单个键值对(也就是serviceid=xxx项),无法提取同一条服务记录下的其他参数 - 未做精确匹配,仅判断输入值是否存在于键值对字符串中,容易出现误匹配(比如输入
251,刚好其他参数值包含251也会被命中) - 没有考虑文件中存在多条服务记录的通用场景
修复后可用代码
# 读取文件内容,按行拆分适配多服务记录场景 with open('t5001.txt', 'r', encoding='utf-8') as f: service_lines = f.read().splitlines() target_sid = input("Enter The Service ID :- ").strip() found = False for line in service_lines: # 跳过空行 if not line.strip(): continue # 拆分键值对,转成字典方便取值 service_info = {} for kv in line.split(':'): if '=' in kv: k, v = kv.split('=', 1) service_info[k.strip()] = v.strip() # 精确匹配serviceid if service_info.get('serviceid') == target_sid: print(f"pmtpid: {service_info.get('pmtpid', '未找到')}") print(f"pidlist: {service_info.get('pidlist', '未找到')}") found = True break if not found: print(f"未找到serviceid为{target_sid}的记录")
代码说明
- 用
with语句管理文件句柄,无需手动调用close方法,避免资源泄露 - 先把每行记录的所有键值对转成Python字典,后续可直接通过key取值,扩展性更强
- 做精确匹配,只有
serviceid的值完全等于输入值时才命中,避免误匹配 - 兼容文件内存在多条服务记录的场景
内容的提问来源于stack exchange,提问作者hemant verma
相关产品推荐
相关产品推荐

