python - 如何删除包含前导 // 或 / 的所有行
问题描述
我有一个文件 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?
解决方案
当然你必须转义斜线,不要用......另一个斜线转义斜线(并使用原始字符串前缀)
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("/"))
推荐阅读
- powershell - 通过 ADUser 问题进行的 ADAccount 非活动帐户管道
- laravel - 通过 Laravel GuzzleHTTP 发出 POST 请求进行令牌认证
- html - 如何使用 python 安全地获取和使用外部 html
- html - 如何使我的按钮的相对位置(对视频)相同?
- python - 二维数组列表的逐像素中位数 - numpy
- javascript - JavaScript 对象的图形表示(树视图)?
- mysql - 删除重复记录
- node.js - 如何从 React StackNavigator 返回到上一个屏幕到特定选项卡
- excel - 如何根据下拉选择返回指向另一个工作表的超链接
- python - 给定一个单词和该单词的每个字母的数字,如何创建每个组合的完整树?