如何用Python删除文本文件中‘NODATACODE’之前的所有内容?
解决文本文件删除"NODATACODE"前所有内容的Python问题
需求说明
需要删除文本文件中NODATACODE出现位置之前的所有内容,原文本内容如下:
MMMMM ; MMMMM : MMMMMMMMMMN, AAAAAAAAAAA,52, AAAA,CCCCCC, MMMMM ; MMMMM : MMMMMMMMMMN, >AAAAAAAAAAA,200, AAAA,CCCCCC,;MMMMM ; MMMMM : MMMMMMMMMMN, AAAAAAAAAAA,53, >AAAA,CCCCCC,AAAA AAAAA AAAAAAAAAAA AAAAAAAAAAA AAAAAAAAAAA NODATACODE, : Food Meal
原代码错误分析
你提供的代码存在三处问题:
- 条件判断中误用赋值符号
=,应该用比较运算符== - 未先读取目标文件内容,
lines变量未定义 - 逻辑错误:仅匹配整行等于
NODATACODE的情况,但目标字符串出现在某一行的中间,且需要保留该位置及之后的所有内容
原错误代码:
with open('Schedule.txt', 'w') as fw: for line in lines: if line.strip('\n') = 'NODATACODE': fw.write(line)
报错信息:
Cell In[1], line 5 if line.strip('\n') = 'NODATACODE': ^ SyntaxError: cannot assign to function call here. Maybe you meant '==' instead of '='?
修正后的代码方案
方案1:一次性读取处理(适合小文件)
直接定位NODATACODE的位置,保留该位置及之后的内容,操作简洁:
# 读取原文件内容 with open('Schedule.txt', 'r', encoding='utf-8') as fr: content = fr.read() target_str = 'NODATACODE' if target_str in content: # 截取目标字符串及之后的内容 result_content = content[content.index(target_str):] # 将结果写入原文件(覆盖) with open('Schedule.txt', 'w', encoding='utf-8') as fw: fw.write(result_content) else: print("文件中未找到NODATACODE")
方案2:逐行读取处理(适合大文件)
针对大文件,逐行读取可节省内存,生成新文件避免误改原文件:
start_write = False # 标记是否开始写入内容 with open('Schedule.txt', 'r', encoding='utf-8') as fr, open('Schedule_new.txt', 'w', encoding='utf-8') as fw: for line in fr: if start_write: fw.write(line) else: if 'NODATACODE' in line: # 截取该行中目标字符串及之后的部分并写入 pos = line.index('NODATACODE') fw.write(line[pos:]) start_write = True
说明
- 方案1会直接覆盖原文件,操作前建议备份文件
- 方案2生成新文件
Schedule_new.txt,可直接查看结果后再替换原文件 - 两种方案都会完整保留
NODATACODE本身及之后的所有内容,符合需求
内容的提问来源于stack exchange,提问作者AnalysisNerd
相关产品推荐
相关产品推荐

