如何删除包含前导//或/的所有行

时间:2018-04-29 11:42:05

标签: python split character

我有一个包含

的文件trial.txt
This can stay
// but this 
/ and this
// must go
I will be happy

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

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

所以删除//我用过

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

但这会产生错误

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

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

1 个答案:

答案 0 :(得分:0)

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

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

但是由于很多原因,这不是非常pythonic:

  • os.system已弃用,以支持subprocess
  • 您的命令行取决于shell,因此如果某些字段变为
  • ,则容易受到攻击
  • 使用sed当Python可以原生地执行它是过度的(也不是可移植的,例如在必须单独安装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("/"))