如何修改Python脚本匹配CSV文件中以‘start time =’开头的行?
匹配CSV文件中指定开头行的Python脚本优化
原脚本与需求问题
原脚本用于精准匹配某一完整行:
with open(filename) as f: line = f.readline() nline = 1 while line.strip() != 'start time = 21.08.2022 1 11:35:04': line=f.readline() nline+=1
需求改为匹配以start time =开头的任意行,但直接修改后脚本出现冻结情况。
冻结原因
若文件中不存在符合条件的行,未做文件结束判断的循环会无限执行:当readline()读到文件末尾时返回空字符串,若循环条件仅判断行是否不匹配开头,空字符串的startswith()会返回False,导致循环持续运行,出现冻结。
可行解决方案
完全可以实现需求,只需修改循环条件,同时判断未读到文件末尾和当前行不匹配开头即可:
方案1:允许行首有空白(去除前导空白后匹配)
适合CSV文件中可能存在行首空格的场景:
with open(filename) as f: line = f.readline() nline = 1 # 同时判断行不为空,且行(去前导空白)不以目标字符串开头 while line and not line.lstrip().startswith('start time ='): line = f.readline() nline += 1 # 循环结束后判断结果 if not line: print("未找到以'start time ='开头的行") else: print(f"找到目标行,行号:{nline}")
方案2:严格匹配行开头(不允许行首空白)
如果要求目标行必须以start time =作为真正的行首:
with open(filename) as f: line = f.readline() nline = 1 while line and not line.startswith('start time ='): line = f.readline() nline += 1 if not line: print("未找到以'start time ='开头的行") else: print(f"找到目标行,行号:{nline}")
内容的提问来源于stack exchange,提问作者fred
相关产品推荐
相关产品推荐

