如何删除文本文件中以特定字符串开头的行?

-1 投票
2 回答
861 浏览
提问于 2025-04-18 02:01

我有一个这样的文本文件:

test:Player:232.746860697:76.0:206.635144909
b2:Player2:245.330907228:77.0:207.785677928
b3:Player4:236.52764454:76.0:203.95246227
b45:Player33:240.496564206:77.0:205.574781979

我想删除以“test:Player”开头的行,我已经做了一些工作,但不知道怎么删除那一行。以下是我目前的代码:

pluginlokacija2 = os.path.realpath("%s/plugins"%os.getcwd())
textfile = open("%s/CreativePoints/Data/plotovi.txt"%pluginlokacija2, 'r')
for line in textfile.readlines():  
    if line.startswith("%s:%s"%(args[1], sender.getName())):
        #delete that line, how?

提前谢谢你!:)

2 个回答

1
    f = open("a.txt","r")
    lines = f.readlines()
    f.close()

    f = open("a.txt","w")

    for line in lines:
      if not line.startswith('test:Player'):
        f.write(line)
        print(line)
    f.close()

希望这能帮到你。根据你的需求进行修改。

1
# Filter unwanted lines
a = filter(lambda x: not x.startswith("%s:%s"%(args[1], sender.getName())), \
            textfile.readlines())

# Write filtered lines to file 
textfile.seek(0)
textfile.truncate()
textfile.writelines(list(x.strip() for x in a))
textfile.close()
from itertools import ifilterfalse 
with open('/home/reserve/Desktop/s.txt', 'r+') as f:
    b = ifilterfalse(lambda x: x.startswith("%s:%s"%(args[1],sender.getName())),\
                    f.readlines())
    f.seek(0)
    f.truncate()
    f.writelines(list(x.strip() for x in b))

别忘了把文件打开为可读可写的模式(用r+而不是r)。

为了确保写入操作的可靠性,可以把所有对文件的操作放在上下文管理器中:

撰写回答