首页 > 解决方案 > 如何删除包含前导 // 或 / 的所有行

问题描述

我有一个文件 trial.txt 包含

This can stay
// but this 
/ and this
// must go
I will be happy

删除前导 # 我在其他情况下使用

os.system(" sed '/^#.*/d' trial.txt > start.txt ")

所以要删除//我用过

os.system(" sed '/^//.*/d' trial.txt > start.txt ")

但这给出了错误

sed: 1: "/^//.*/d": invalid command code /

有什么建议么?最好使用 Python 还是使用 Linux?

标签: pythonsplitcharacter

解决方案


当然你必须转义斜线,不要用......另一个斜线转义斜线(并使用原始字符串前缀)

os.system("sed r'/^\/.*/d' trial.txt > start.txt")

但这不是很pythonic,原因有很多:

  • os.system不赞成使用subprocess
  • 你的命令行依赖于 shell,如果某些字段变得可变,那么很容易受到攻击
  • 使用sedPython 本身可以做到这一点是多余的(也不是可移植的,例如在sed必须单独安装的 Windows 上,单引号也不会在那里工作......)

除此之外不会过滤掉单斜线。

我会/在每一行的开头进行测试,并writelines与生成器理解一起使用:

with open("trial.txt") as fr, open("start.txt","w") as fw:
    fw.writelines(line for line in fr if not line.startswith("/"))

推荐阅读