Python中如何直接删除文本文件中的某一行?
想通过 mmap 读取文件中的行,然后直接读写该文本删除某些特定的行。 怎么实现呢?
Python中如何直接删除文本文件中的某一行?
8 回复
不能
直接删除文本文件中特定行的标准做法是:读取原文件内容,过滤掉目标行,然后写回新文件,最后替换原文件。因为文件系统不支持直接在文件中间“删除”一段数据。
这里给你一个函数,传入文件路径和要删除的行号(从1开始计数):
def delete_line(filepath, line_number):
"""删除文本文件中指定行号的一行"""
with open(filepath, 'r', encoding='utf-8') as file:
lines = file.readlines()
# 检查行号是否有效
if 1 <= line_number <= len(lines):
# 删除指定行(列表索引从0开始)
del lines[line_number - 1]
# 写回文件
with open(filepath, 'w', encoding='utf-8') as file:
file.writelines(lines)
return True
else:
return False
# 使用示例:删除example.txt的第3行
delete_line('example.txt', 3)
关键点:
readlines()读取所有行到内存列表- 列表操作删除目标行(记得行号-1转换为索引)
writelines()将剩余行写回原文件
如果要按内容删除(比如删除包含特定字符串的行):
def delete_line_by_content(filepath, target_content):
with open(filepath, 'r', encoding='utf-8') as file:
lines = file.readlines()
# 过滤掉包含目标内容的行
new_lines = [line for line in lines if target_content not in line]
with open(filepath, 'w', encoding='utf-8') as file:
file.writelines(new_lines)
# 删除包含"delete_me"的行
delete_line_by_content('example.txt', 'delete_me')
注意: 大文件处理要考虑内存,可以分块读写,但小文件这样最直接。
总结:读-删-写是最可靠的方法。
貌似还是只有重写文件这一个办法?
就为了删除文本某一行?为何不直接用 sed?
sed/awk 教做人
mmap 可能不行,fileinput 是可以做到的,把 inplace=True 即可
不过 fileinput 好像还是得遍历一遍……效率也不高
从文件系统来看任何方法都不可避免的要重写文件。

