需要使用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']