如何使用sed和Python删除文件中的指定行:从known_hosts到大数据处理

我们有时会碰到类似的需求,即删除文件里的某一行。例如在 ssh 登录时,若提示 known_hosts 中主机信息有变更需要删除。这种情况下可以打开文件,去找到对应的行,然后删除该行并保存。当然还有更便捷的办法,像使用 sed 命令行工具:

如何使用sed和Python删除文件中的指定行:从known_hosts到大数据处理

$ sed -i '1d'[id_1004832886]/.ssh/known_hosts

以上命令的作用是删除文件的第一行。其工作原理为:首先创建一个临时文件,接着把修改后的内容写入该临时文件,之后再用这个临时文件去替换原文件。

如果不存在 linux 环境,亦或是在 shell 环境下进行操作不太便利。那么能够自行编写一个与之类似的工具,将文件的特定行予以删除。

我们首先创建一个文件,这个文件有 10 万行,文件名被我们称作 bigfile.txt,是通过 python 来创建的。

python gen_bigfile.py

创建 sample 文件的测试代码如下:

#!python3
import sys
file_name = 'bigfile.txt'
n = 10*10000
line = 'x'*78
f = open(file_name, mode='w', encoding='utf-8')
for i in range(n): s = str(i) + ' ' + line + '\n' f.write(s)
f.close()

10 万行的文件,其文件大小约为 8M,一次性将其读到内存中进行处理是没有问题的。若文件较大,像好几 G 那样,就需要考虑分片读取的方式,或者采用临时文件替换的方式来写文件。

$ du -sh bigfile.txt8.2M    bigfile.txt

我们先把文件读取出来并放置到内存里,接着关闭该文件。之后以“w”模式重新打开这个文件,把内存里的数据写回到原来的文件中,以此来实现删一行的目的。

测试代码如下:

#!python3
def deleteline(file_name, n=1, encoding='utf-8'): '''删除文件指定行''' L = [] m = 0 with open(file_name, mode='r', encoding=encoding) as f: while True: line = f.readline() if line: m += 1 if m == n: continue L.append(line) else: break
with open(file_name, mode='w', encoding=encoding) as f: f.writelines(L)

if __name__ == '__main__':
    file_name = 'bigfile.txt'    # 删文件的首行 deleteline(file_name, 1)

在 WSL linux 环境下,可以利用 watch 命令来观察文件内容的变化。

$ watch -n 1 'head bigfile.txt'

多次运行程序后,可以发现每次执行,文件的第一行都会被删掉。利用包装好的 deleteline()函数能够删除文件的指定行。如果文件体积不大,可将文件内容保存到变量里。要是文件太大,就需要借助临时文件来辅助,否则内存会被用光。

全文完。

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读