首页 > 解决方案 > 如何从 txt 文件中删除特定行和以下 n 行?

问题描述

我正在创建一个程序来更新一个包含城市列表的文本文件:

New York City
New York
USA

Newark
New Jersey
USA

Toronto
Ontario
Canada

如果我想使用 bash 脚本删除 Newark 的详细信息,我可以这样做:

sed -i "/Newark/,+3d" test.txt

这将给我留下以下内容:

New York City
New York
USA

Toronto
Ontario
Canada

但是,我想在 Python 中执行此操作,并且在与 Newark 的行之后,我在弄清楚如何删除以下行时遇到了问题。我可以删除纽瓦克:

with open('test.txt') as oldfile, open('test2.txt', 'w') as newfile:
        for line in oldfile:
            if not "Newark" in line:
                newfile.write(line)

os.remove('test.txt')
os.rename('test2.txt', 'test.txt')

但这对剩下的两行没有任何作用,而是创建了一个新文件,然后我必须用它来替换原始文件。

  1. 如何使用 Python 模拟 sed 命令的功能?
  2. 有什么方法可以进行文件内编辑,因此我不必每次需要从中删除文件时都创建和替换文件?

标签: pythonsedtext-filesedit

解决方案


带柜台?这里是:

with open('test.txt') as oldfile, open('test2.txt', 'w') as newfile:
    skip = 0
    for line in oldfile:
        if "Newark" in line:
            skip = 3
        elif skip > 0:
            skip = skip - 1
        else:
            newfile.write(line)

编辑:

我只回答了第一个问题。fileinput支持文件编辑,请看这里:如何搜索和替换文件中的文本? 顺便说一句,我也会推荐就地,因为它不会劫持标准输出


推荐阅读