Python删除文本文件特定字符:PDF转TXT后清理及报错求助
问题解决方案
一、正确删除目标字符串的方法
你当前代码的核心问题是错误地将文本中的换行符当成了字符串"\n",导致匹配逻辑失效。实际读取TXT文件时,换行是真实的换行符(\n),而非字符串"\n"(即反斜杠加n两个字符)。另外,需精准定位要删除的完整目标串,避免误删其他\nC\n。
修正后的代码示例
def findWordInText(name): txt_file = f"{name}.txt" count = 0 # 一次性读取全部文本 with open(txt_file, 'r', encoding='utf-8', errors="ignore") as f: content = f.read() # 目标要删除的完整字符串 target_to_remove = "6\n5\n4\n3\n2\n1\nD\nC\nB\nA" # 如果存在目标串,直接删除 if target_to_remove in content: print('需要删除目标内容') # 调用修改函数,替换为空字符串(即删除) inplace_change(txt_file, target_to_remove, "") # 检查是否还有单独的\nC\n if "\nC\n" in content: writeOnExcel(name, "C") count +=1 def inplace_change(file, old_str, new_str): with open(file, 'r', encoding='utf-8', errors="ignore") as f: s = f.read() if old_str not in s: print(f'"{old_str}" 未在 {file} 中找到。') return with open(file, 'w', encoding='utf-8', errors="ignore") as f: print(f'将 {file} 中的 "{old_str}" 替换为 "{new_str}"') s = s.replace(old_str, new_str) f.write(s)
关键修正点
- 匹配真实换行符:直接用
"\nC\n"而非r"\nC\n",r"\n"会被解析成两个字符(\和n),而文本中是单个换行符。 - 精准匹配目标串:直接匹配完整的
"6\n5\n4\n3\n2\n1\nD\nC\nB\nA",避免误删其他位置的\nC\n。如果一定要通过\nC\nB定位,可改用正则表达式匹配其前后内容:import re # 匹配包含\nC\nB\nA的整段内容并删除 content = re.sub(r".*\nC\nB\nA", "", content) - 修复变量名错误:原
inplace_change函数中格式化字符串用了未定义的old_string/new_string,现在统一为old_str/new_str。 - 优化文件操作:避免重复打开文件,一次性读取内容后处理,减少IO开销。
二、解决Tabula转换PDF的报错问题
你遇到的subprocess.CalledProcessError是Tabula工具解析PDF时返回错误,常见原因及解决方法:
- 检查PDF文件状态:确认
383026_C.pdf未加密、未损坏,用PDF阅读器打开验证完整性。 - 调整Tabula参数:
- 替换
--guess为--lattice(适配表格结构PDF)或--stream(适配流式文本PDF),不同参数解析逻辑不同。 - 确认
--pages 1是否正确,若需转换全部页面,改为--pages all。
- 替换
- 验证Java环境:Tabula依赖Java 8及以上版本,确保终端中
java命令能正常执行。 - 更新Tabula版本:当前使用的1.0.5版本较旧,执行以下命令升级:
pip install --upgrade tabula-py
内容的提问来源于stack exchange,提问作者kronos_58
相关产品推荐
相关产品推荐

