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

在Python/NumPy中删除文件中的所有重复行,python,numpy,Python,Numpy,我的问题是删除两个重复的行。我有一个文本文件: 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:

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

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

谢谢你们的帮助。

问题中没有太多细节,您已经标记了
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]
d={}
将open('/file/path',r')作为f:
对于f中的行:
如果行不在d中:
d[行]=1
其他:
d[行]+=1
如果d[line]<2,则无_dup=[line for line in d]

问题中没有太多细节,您已经标记了
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]
d={}
将open('/file/path',r')作为f:
对于f中的行:
如果行不在d中:
d[行]=1
其他:
d[行]+=1
如果d[line]<2,则无_dup=[line for line in d]

选项1
使用
numpy

首先,用
np.loadtxt
加载文件

接下来,将
np.unique
return\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')
要保存到文本,您可以使用
pd.To\u csv


选项1
使用
numpy

首先,用
np.loadtxt
加载文件

接下来,将
np.unique
return\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')
要保存到文本,您可以使用
pd.To\u csv


另一个简短的选择是
集合。计数器
对象:

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

另一个简短的选择是
集合。计数器
对象:

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


如上所述,你可以使用熊猫。Numpy还具有独特的删除重复项的功能。如上所述,您可以使用Pandas。Numpy还具有用于删除重复项的
unique
功能。这也不是Numpy…@cᴏʟᴅsᴘᴇᴇᴅ 是的,我知道。不幸的是,我没有太多的经验。虽然在帖子中对其进行了标记,但我没有看到针对该库的特定解决方案的特定请求。如果你可以简单地用标准库来做,为什么不呢?@cᴏʟᴅsᴘᴇᴇᴅ, 完全在numpy上做这件事不是强制性的。主要的标记是
python
python3
@shash678在您的例子中,答案无论如何都是不正确的。但一般来说,你不应该对这样的事情做出假设。请OP澄清。@cᴏʟᴅsᴘᴇᴇᴅ 说得对。因此,我做了一次编辑,要求OP澄清,但现在仍然保留我的解决方案。这也不是numpy…@cᴏʟᴅsᴘᴇᴇᴅ 是的,我知道。不幸的是,我没有太多的经验。虽然在帖子中对其进行了标记,但我没有看到针对该库的特定解决方案的特定请求。如果你可以简单地用标准库来做,为什么不呢?@cᴏʟᴅsᴘᴇᴇᴅ, 完全在numpy上做这件事不是强制性的。主要的标记是
python
python3
@shash678在您的例子中,答案无论如何都是不正确的。但一般来说,你不应该对这样的事情做出假设。请OP澄清。@cᴏʟᴅsᴘᴇᴇᴅ 说得对。因此,我做了一次编辑,要求OP澄清,但现在仍然保留了我的解决方案。您只需将文件对象
f
传递给
计数器
,而不是先对其执行
读取().splitlines()
。@Blckknght,不,这不起作用,因为中间为空lines@RomanPerekhrest非常感谢。你的答案就是我一直在寻找的:)@A.Babik,你是welcome@RomanPerekhrest我现在想知道如何检测文本文件中的更改。示例:如果上次读取时有新行。有什么想法吗?你可以把文件对象
f
传递给
计数器
,而不是先对其执行
read().splitlines()
。@Blckknght,不,这不起作用,因为中间为空lines@RomanPerekhrest非常感谢。你的答案就是我一直在寻找的:)@A.Babik,你是welcome@RomanPerekhrest我现在想知道如何检测文本文件中的更改。示例:如果上次读取时有新行。有什么想法吗?谢谢你的回答:“A.A. Babik注意到你有能力,所以,请考虑做这件事。”CaldFufft说:“谢谢你的回答。”A.Babik你只能接受一个。我希望你确定你接受了你想要的(我也收到了通知,这就是为什么我问)@COLDSPEED我希望我能接受这两个,因为两个答案都是正确的。我已经接受了一个最干净的输出。谢谢你的回答:“@ A.Babik注意到你有能力,所以,请考虑做它。”CaldFEEST制作:)谢谢你的回答。@ A.Babik你只能接受一个。我希望你确定你接受了你想要的(我也收到了通知,这就是为什么我问)@COLDSPEED我希望我能接受这两个,因为两个答案都是正确的。我已经接受了一个最干净的输出。