Python 在满足特定条件时替换列表中的元素

Python 在满足特定条件时替换列表中的元素,python,regex,Python,Regex,我正在编写一个python脚本,当前如果定义的文本文件中有某些短语与列表匹配,它将从文件中删除它们 相关列表代码片段如下所示: replacements = {'pc-123456 alert good-name-here':'', 'pc-123456 alert remove-name-here':'', } lines = [] with open('path/to/file.txt') as infile: for line in infile:

我正在编写一个python脚本,当前如果定义的文本文件中有某些短语与列表匹配,它将从文件中删除它们

相关列表代码片段如下所示:

replacements = {'pc-123456 alert good-name-here':'',
                'pc-123456 alert remove-name-here':'',
}
lines = []
with open('path/to/file.txt') as infile:
    for line in infile:
        for src, target in replacements.items():
            line = line.replace(src, target)
        lines.append(line)

with open('path/to/same/file.txt', 'w') as outfile:
    for line in lines:
        outfile.write(line)
其中,{中的前半部分是来自警报文件的直接文本,'',如果匹配,则清除文件中的文本。目前,这是有效的

我需要将以下内容添加到脚本中的替换列表中,其中:

replacements = {'12-Dec-19 00:00 pc-123456 alert good-name-here':'',
                '12-Dec-19 00:01 pc-123456 alert remove-name-here':'',
                '12-Dec-19 00:01 pc-234567 alert remove-name-here':'',
}
但我想删除定义为“此处删除名称”的任何详细信息(包括日期/时间、设备名称等),即使警报将在两个以上的设备(如pc-123456、pc-2345678、pc-356435、pc-4563255)上出现

如果脚本为同一警报名称选择了不同的设备名称,那么删除整个文本行以及删除时间戳(当前未在替换列表中定义)的最简单方法是什么

代码的其余部分如下所示:

replacements = {'pc-123456 alert good-name-here':'',
                'pc-123456 alert remove-name-here':'',
}
lines = []
with open('path/to/file.txt') as infile:
    for line in infile:
        for src, target in replacements.items():
            line = line.replace(src, target)
        lines.append(line)

with open('path/to/same/file.txt', 'w') as outfile:
    for line in lines:
        outfile.write(line)

谢谢。

如果你知道一行末尾是什么,你可以这样做:


删除结尾=[“删除结尾”]
行=[]
以open('path/to/file.txt')作为填充:
对于填充中的线:
下一行=下一行
要以结尾删除结尾,请执行以下操作:
如果line.rstrip().endswith(结束):
下一行='\n'
打破
行。追加(下一行)
打开('path/to/same/file.txt','w')作为输出文件:
对于行中的行:
输出文件。写入(行)
您还可以查找子字符串:

不需要的=['substring 1','substring 2']
行=[]
以open('path/to/file.txt')作为填充:
对于填充中的线:
下一行=下一行
对于不需要的子字符串:
如果子字符串在一行中:
下一行='\n'
打破
行。追加(下一行)
打开('path/to/same/file.txt','w')作为输出文件:
对于行中的行:
输出文件。写入(行)

听起来您应该使用正则表达式而不是固定字符串。请改用正则表达式。除了一个空字符串之外,还能有其他替换方法吗?您可以添加现有的代码吗far@kendriu已编辑。我知道我需要使用正则表达式,但不确定如何才能优雅而正确地执行此操作。谢谢@kendriu,我尝试了您的第一次编辑,但我有多个必须删除的“名称”,例如“to_remove_ending_1”、“to_remove_ending_2”等。如何实现它?如果我尝试多个名称,似乎会重复每一行。我以前的实现中有一个错误。请立即尝试。您可以将子字符串的
循环替换为
(如果有)(不需要的子字符串的行中的子字符串):