Python使用正则表达式搜索文件匹配指定ID提取对应行问题咨询
错误原因分析
re.findall入参规则使用错误:该方法的入参顺序为「正则表达式」「待匹配的字符串」「匹配标志位」,原代码直接传入ID列表和文件名变量,完全不符合方法调用要求,是报错的直接原因- 变量名不统一:文件名提前赋值给了
f变量,后续open(file)中的file属于未定义变量 - 逻辑顺序错误:没有逐行读取文件内容的前置逻辑,提前调用正则匹配方法无法得到正确结果
解决方案
方案1:正则匹配实现(符合你要通过正则搜索的需求)
利用正则行首锚定规则,拼接ID列表生成匹配规则,逐行校验:
import re file_path = "bdata.txt" statids = ["85", "106", "140", "172", "337"] # 构造正则规则,re.escape避免特殊字符导致匹配异常 id_pattern = re.compile(r'^{"id": "(' + '|'.join(map(re.escape, statids)) + r')"}') with open(file_path, 'r', encoding='utf-8') as f: for line in f: stripped_line = line.strip() if not stripped_line: continue # 匹配行首符合规则的内容 if id_pattern.match(stripped_line): # 此处stripped_line就是完整匹配行,可直接用于后续处理 print(stripped_line)
方案2:JSON解析实现(更稳定,适合整行为合法JSON的场景)
如果每行内容都是合法的JSON结构,直接解析后判断ID字段,不需要手写正则,容错率更高:
import json file_path = "bdata.txt" # 转为集合查询效率更高 statids = {"85", "106", "140", "172", "337"} with open(file_path, 'r', encoding='utf-8') as f: for line in f: stripped_line = line.strip() if not stripped_line: continue try: row_data = json.loads(stripped_line) if str(row_data.get("id", "")) in statids: # 可直接用row_data对象的字段存入类,无需手动拆分内容 print(stripped_line) except json.JSONDecodeError: # 跳过格式非法的行 continue
内容的提问来源于stack exchange,提问作者SGT Anonymous
相关产品推荐
相关产品推荐

