使用Python修复行拆分异常的TXT文件:统一行首APA行尾||格式
问题分析与优化方案
原代码核心问题
- 正则逻辑错误:你写的
re.compile("\s*[^APA]")语义是「匹配0个或多个空白字符后接1个非A、非P、非A的字符」,完全无法实现“判断行是否不以APA开头”的需求,匹配逻辑完全不符合预期。 - 迭代控制混乱:同时使用for循环遍历行列表、手动维护ptr指针,还出现了未定义的
timer变量,直接导致指针偏移错误,最终结果出现顺序错乱、数据遗漏。 - 拼接规则错误:拆分的多行属于同一条APA记录的字段内容,直接拼接
|会额外增加分隔符,和预期结果不符。
最优实现方案
核心逻辑非常简单:维护一个临时缓冲区存储未完成拼接的APA记录,逐行处理即可,逻辑无歧义,不会出现顺序错误或遗漏:
final_list = [] # 临时缓冲区,存储还没拼完的APA行 current_buffer = "" for line in string_list: # 先去掉当前行首尾的换行符、空白符 stripped_line = line.strip() if not stripped_line: continue # 跳过空行 # 缓冲区为空说明是新记录开始,直接写入缓冲区 if not current_buffer: current_buffer = stripped_line else: # 非新记录,把当前行内容用空格拼到缓冲区后,符合示例拼接规则 current_buffer += f" {stripped_line}" # 每次拼接完成后检查缓冲区是否符合合法行规则 if current_buffer.startswith("APA") and current_buffer.endswith("||"): final_list.append(current_buffer) # 清空缓冲区等待下一条记录 current_buffer = "" # 最后缓冲区还有内容说明最后一条记录不完整,可按需处理(丢弃/单独标记) if current_buffer: print(f"发现不完整记录:{current_buffer}")
方案优势
- 逻辑极简,没有复杂的指针和正则匹配,不会出现逻辑漏洞
- 严格按照行的先后顺序处理,不会出现顺序错乱
- 内存占用低,16MB文件可以直接逐行读取处理,不需要一次性加载全部内容到内存,逐行读文件的版本如下:
final_list = [] current_buffer = "" with open("你的文件路径.txt", "r", encoding="utf-8") as f: for line in f: stripped_line = line.strip() if not stripped_line: continue if not current_buffer: current_buffer = stripped_line else: # 如果不需要拼接空格,直接写current_buffer += stripped_line即可 current_buffer += f" {stripped_line}" if current_buffer.startswith("APA") and current_buffer.endswith("||"): final_list.append(current_buffer) current_buffer = ""
内容的提问来源于stack exchange,提问作者Amal Sailendran
相关产品推荐
相关产品推荐

