在Python 3.5中从txt中删除特定字符

时间:2017-03-17 23:08:10

标签: python-3.5

我正在尝试创建一个可以删除*或!的程序从行开始,如果他们以所述字符开头。因此,像:

controllerInstance.run((Runnable) () -> { /*no return*/ }); // calls run(Runnable command)
controllerInstance.run((Callable) () -> { return null; });  // calls run(Callable command)

会改为:

*81
!81

这是我现在使用的代码:

81
81

但是,只会删除星星,这有什么问题?

2 个答案:

答案 0 :(得分:0)

您的布尔条件不正确,您需要在所有条件下进行测试,并在第一个and

中使用if
if line.startswith("!") == False and line.startswith("*") == False:
    ...

或者更好,使用not

if not (line.startswith("!") or line.startswith("*")):
    ...

更好的是,提取您感兴趣的令牌并根据排除列表进行检查

with open("Test.txt",'r') as c:
    lines = c.readlines()

with open("Test.txt",'w') as c:
    for line in lines:
        if line[0] in "*!":
            line = line[1:]
        c.write(line)

答案 1 :(得分:0)

使用正则表达式替换的解决方案:

import re

with open("Test.txt",'r+') as c:
        inp = c.read()
        out = re.sub(r'^([\*!])(.*)', r'\2', inp, flags=re.MULTILINE)
        c.seek(0)
        c.write(out)
        c.truncate()

注意,上面的正则表达式只会替换前导'*'或'!'。因此,以

之类的任何字符组合开头的行
*!80
!*80
**80

将被

取代
!80
*80
*80

替换所有领先的'*'和'!'在以字符开头的行上,将模式更改为

'^([\*!]+)(.*)'