当前位置: 首页 > 知识库问答 >
问题:

在Python/NumPy[duplicate]中删除文件中的所有重复行

程胡非
2023-03-14

我的问题是删除两个重复的行。我有一个文本文件:

192.168.1.18 --- B8:27:EB:48:C3:B6
192.168.1.12 --- 00:A0:57:2E:A6:12
192.168.1.11 --- 00:1D:A2:80:3C:CC
192.168.1.7 --- F0:9F:C2:0A:48:E7
192.168.1.6 --- 80:2A:A8:C9:85:1C
192.168.1.1 --- F0:9F:C2:05:B7:A6
192.168.1.9 --- DC:4A:3E:DF:22:06
192.168.1.8 --- 80:2A:A8:C9:8E:F6
192.168.1.1 --- F0:9F:C2:05:B7:A6

192.168.1.7 --- F0:9F:C2:0A:48:E7

192.168.1.12 --- 00:A0:57:2E:A6:12

192.168.1.11 --- 00:1D:A2:80:3C:CC

192.168.1.6 --- 80:2A:A8:C9:85:1C

192.168.1.8 --- 80:2A:A8:C9:8E:F6

文本文件与它的外观完全相同。请帮助我,我想删除两个重复的行,使其只保留:

192.168.1.18 --- B8:27:EB:48:C3:B6

192.168.1.9 --- DC:4A:3E:DF:22:06

谢谢你们的帮助。

共有3个答案

易修洁
2023-03-14

选项1
使用Numpy

首先,用np.loadtxt加载文件。

x = np.loadtxt('file.txt', dtype=str, delimiter=',') 
                              # bogus delimiter so that a 1D array is loaded

接下来,将np.uniquereturn\u counts=True一起使用,并查找所有未重复的唯一条目。

unique, counts = np.unique(x, return_counts=True)
out = unique[counts == 1]

out
array(['192.168.1.18 --- B8:27:EB:48:C3:B6',
       '192.168.1.9 --- DC:4A:3E:DF:22:06'],
      dtype='<U34')

选项2
使用pandas

使用pd加载数据。读取\u csv,然后调用drop\u duplicates

df  = pd.read_csv('file.txt', delimiter=',', header=None)

df
                                     0
0   192.168.1.18 --- B8:27:EB:48:C3:B6
1   192.168.1.12 --- 00:A0:57:2E:A6:12
2   192.168.1.11 --- 00:1D:A2:80:3C:CC
3    192.168.1.7 --- F0:9F:C2:0A:48:E7
4    192.168.1.6 --- 80:2A:A8:C9:85:1C
5    192.168.1.1 --- F0:9F:C2:05:B7:A6
6    192.168.1.9 --- DC:4A:3E:DF:22:06
7    192.168.1.8 --- 80:2A:A8:C9:8E:F6
8    192.168.1.1 --- F0:9F:C2:05:B7:A6
9    192.168.1.7 --- F0:9F:C2:0A:48:E7
10  192.168.1.12 --- 00:A0:57:2E:A6:12
11  192.168.1.11 --- 00:1D:A2:80:3C:CC
12   192.168.1.6 --- 80:2A:A8:C9:85:1C
13   192.168.1.8 --- 80:2A:A8:C9:8E:F6

df.drop_duplicates(keep=False)
                                    0
0  192.168.1.18 --- B8:27:EB:48:C3:B6
6   192.168.1.9 --- DC:4A:3E:DF:22:06

要保存到文本,可以使用pd.to_csv

df.to_csv('file.txt', delimiter='')
萧宏远
2023-03-14

问题中没有太多细节,您已经标记了numpy,这是一个要求还是一个兴趣?

如果没有具体要求,请使用标准库:

d = {}
with open('/file/path', 'r') as f:
    for line in f:
        if line not in d:
            d[line] = 1
        else:
            d[line] += 1

no_dup = [line for line in d if d[line] < 2]
江嘉悦
2023-03-14

另一个简短的替代集合。计数器对象:

import collections

with open('lines.txt', 'r') as f:
    for k,c in collections.Counter(f.read().splitlines()).items():
        if c == 1:
            print(k)

输出:

192.168.1.18 --- B8:27:EB:48:C3:B6
192.168.1.9 --- DC:4A:3E:DF:22:06
 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 在MySQL中删除重复的行 (25个答案) 3个月前关闭。 如何从MySQL表中删除所有重复数据? 例如,具有以下数据: 我会使用,如果它是一个查询。 我该怎么做才能只删除重复项并仅保留每个记录一个? 问题答案: 编辑者警告:此解决方案的计算效率低下,可能会降低大型表的连接。 注意:您 需要 首先在表的 测试副本 上执行此操作! 完成此操作后,我发现,除

  • 函数非常适合统一数据帧。但是,要传递的关键字参数之一是或,而我希望删除列子集中所有重复的行。这有可能吗? 例如,我想删除与列和匹配的行,因此这应该删除行0和1。

  • 我需要删除所有行而不留下任何唯一记录。如果存在重复,则删除所有匹配的行。Criteria是C列,如果C列中存在任何重复记录,则删除整行(包括unique)。

  • 问题内容: 我有一个numpy值数组: 我想从数组中删除具有重复值的行。例如,上述数组的结果应为: 我不确定如何使用numpy有效地做到这一点而无需循环(数组可能会很大)。有人知道我该怎么做吗? 问题答案: 这是一个选择:

  • 问题内容: 我想删除目录中带有扩展名的所有文件。如何在Python中做到这一点? 问题答案: 通过和: 仅使用一个循环: 或通过: 确保位于正确的目录中,并最终使用。

  • 我有一个这样的专栏: 我希望专栏看起来像这样: 只希望保留重复记录的第一个或最后一个。 目前,我使用的是: 但它不起作用。我错过了什么吗?