Python删除文本文件含指定字符串行功能失效问题求助
问题根因
- 错误转换坏字符串列表:
string_bads = str(bads)会将整个列表转为字符串格式的字面量,无法实现逐个匹配列表内违禁字符串的需求 - 文件打开模式错误:使用
w/w+模式打开原文件时会直接清空文件内容,后续循环读取不到任何行 - 匹配逻辑写反:多处判断逻辑是匹配到违禁内容才写入文件,和「删除含违禁内容的行」的需求完全相反
- 匹配语法错误:
any判断中变量顺序写反,完全无法触发匹配规则
正确实现方案
直接使用定义好的bads列表即可,不需要转成字符串:
bads = ['IV\t', '', 'Speaker Key:\n', 'Page 1 of 1\n'] def prepText(old_file_path, new_file_path): with open(old_file_path, 'r', encoding='utf-8') as old_f, open(new_file_path, 'w', encoding='utf-8') as new_f: for line in old_f: # 只要行包含任意一个违禁字符串,就跳过不写入 if not any(bad_str in line for bad_str in bads): new_f.write(line)
如果需要直接修改原文件(建议提前备份避免数据丢失),可以读完所有符合要求的行之后再覆盖写入原文件:
def prepText(file_path): # 先读取所有符合要求的行 valid_lines = [] with open(file_path, 'r', encoding='utf-8') as f: for line in f: if not any(bad_str in line for bad_str in bads): valid_lines.append(line) # 再覆盖写入原文件 with open(file_path, 'w', encoding='utf-8') as f: f.writelines(valid_lines)
验证读取方法
调用函数后用以下代码验证结果即可:
with open("newfile", encoding='utf-8') as good_one: lines = good_one.readlines() print(lines)
内容的提问来源于stack exchange,提问作者user17169994
相关产品推荐
相关产品推荐

