需要使用python从文件中提取唯一行的帮助吗
我有一个包含以下详细信息的文件:需要使用python从文件中提取唯一行的帮助吗,python,Python,我有一个包含以下详细信息的文件: **169.254.230.157 : 169.254.42.146** 169.254.230.157 : 169.254.138.97 169.254.230.157 : 169.254.162.67 169.254.223.76 : 169.254.42.146 **169.254.223.76 : 169.254.138.97** 169.254.223.76 : 169.254.162.67 我需要得到独特的线条,如下图所示 169.254.230.
**169.254.230.157 : 169.254.42.146**
169.254.230.157 : 169.254.138.97
169.254.230.157 : 169.254.162.67
169.254.223.76 : 169.254.42.146
**169.254.223.76 : 169.254.138.97**
169.254.223.76 : 169.254.162.67
我需要得到独特的线条,如下图所示
169.254.230.157 : 169.254.42.146
169.254.223.76 : 169.254.138.97
以下是我所尝试的:
ping_ip = open("ping.txt","r")
ping_lines = ping_ip.readlines()
list1 = []
list2 = []
for line in ping_lines:
ip_s, ip_d = line.split(":")
#print ip_s, " : ", ip_d
m = re.search(ip_s.rstrip(),line)
n = re.search(ip_d.rstrip(),line)
if m and n not in list1 and list2 :
list1.append(m.group(0))
list2.append(n.group(0))
print line
print set(list1)
我不确定我是否完全理解您的问题,但如果您试图从值列表(如列出的IP地址)中获取唯一值,则可以将数据放入一个集合中,根据定义,该集合是唯一项的集合 使用您的代码,您可以做类似的事情(不确定这是否有效,但只是为了演示):
看起来您正在寻找独特的组合(即,两个项目都尚未添加)。您应该更清楚地定义“唯一性”:
r = []
with open(...) as f:
seen = set()
for line in f:
x = line.strip().split(' : ')
if all(i not in seen for i in x):
r.append(line.strip())
seen |= set(x)
r
输出:
['169.254.230.157 : 169.254.42.146', '169.254.223.76 : 169.254.138.97']
您有问题吗?
如果m和n不在列表1和列表2中:
这并不像您期望的那样工作。这就像说如果(m)和(n不在列表1中)和(列表2中):不是所有的行都是唯一的吗?在您的示例中,我没有看到任何重复的行。在问题中提供的示例中,IP1:IP2
的所有组合都是唯一的,因此不清楚“唯一”在这个示例中的含义case@SembeiNorimaki我同意,但正如你所见,使用上面的“唯一”的定义可以得到所需的输出。是的,从原始代码看,似乎OP想要“每一行都没有IP地址出现在前面的任何一行中”。但是如果OP没有澄清,我不希望看到答案做出这样的假设。@smarx比这稍微微妙一点,结果中没有添加任何IP地址<代码>169.254.138.97已被查看,但未包括在内。这一点很好。这是一件非常奇怪的事情,我认为这不可能是OP真正想要的。我认为我们应该继续等待澄清(尽管我也已经投票决定结束,因为这个问题在这个模棱两可的状态下已经公开了一段时间)。
['169.254.230.157 : 169.254.42.146', '169.254.223.76 : 169.254.138.97']