如何使用Python删除TXT文件中特殊字符、指定文本和空行
问题修复方案
原有代码核心问题
- 第一个致命错误是你同时对同一个文件用读和写模式打开,
open('MICnew.txt', 'w')执行的时候会直接清空文件内容,后续读操作拿到的是空内容,根本没法正常处理 - 没有加入uparrow特殊字符的过滤逻辑
- 第二次用
r+模式处理空行时,文件读写指针会随着读写操作移动,逻辑混乱,无法正确覆盖写入处理后的内容 - 仅靠关键词匹配无法完全处理重复表头,容易出现漏删
调整后可用代码
# 要删除的关键词,匹配到对应行直接丢弃 remove_keywords = ['Trial Balance - Total Currency', 'Page:', 'Currency:', 'Balance Type:', 'ENTITY Range:', 'Ledger:', 'ENTITY:', '------------'] # 要删除的特殊字符,这里的↑就是你说的uparrow,可根据实际识别到的字符补充 special_chars = ['↑'] # 先读取源文件所有内容到内存,避免同时读写同一文件导致内容丢失 with open('MICnew.txt', 'r', encoding='utf-8', errors='ignore') as f: lines = f.readlines() processed_lines = [] # 记录已出现过的表头,用于删除重复表头 seen_headers = set() for line in lines: # 第一步:删除所有特殊字符 for c in special_chars: line = line.replace(c, '') # 第二步:过滤空行(包括全是空格/制表符的空白行) if line.strip() == '': continue # 第三步:过滤包含指定关键词的行 if any(keyword in line for keyword in remove_keywords): continue # 第四步:过滤重复表头,仅保留第一次出现的表头,后续相同行直接丢弃 # 如果表头是固定内容,可直接把判断条件换成 line.strip() == 你的固定表头内容,匹配更准确 if line.strip() in seen_headers: continue seen_headers.add(line.strip()) processed_lines.append(line) # 处理完成后写回文件 with open('MICnew.txt', 'w', encoding='utf-8') as f: f.writelines(processed_lines)
补充说明
- 如果你遇到的uparrow不是普通的
↑符号,可以先打印异常行的字符编码确认:print([ord(c) for c in 异常行内容]),找到对应字符的Unicode编码后添加到special_chars里即可 - 处理前建议先备份原文件,避免内容丢失
内容的提问来源于stack exchange,提问作者Shri
相关产品推荐
相关产品推荐

