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 好像还是得遍历一遍……效率也不高

从文件系统来看任何方法都不可避免的要重写文件。

回到顶部