如何在txt文件内去除重复的数据?

问题遇到的现象和发生背景

我有一个有600万行数据的txt文件,想要去除重复的部分。
如图,图片里每行代表一个书名,书名前面是路径
每行的书名都有一个8位的数字,这个是ssid码。ssid长度是固定的,都是8位
其中第1,2,4行有相同的ssid:12090113,这3行就算是重复数据了,只要ssid相同,数据就属于重复数据

img


下面这张图是数据去重后的效果,只保留1行12090113的数据就行了。

img


这个功能要怎么实现?有没有啥软件可以推荐一下,或者python代码也可以,我电脑里有python环境

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

可以使用pandas处理,存取数据和筛选数据几行代码即可,代码这样写:

import pandas as pd
import re
df=pd.read_csv('t2.txt',names=['v'],header=None)
df['id']=df['v'].apply(lambda x:re.findall('\d{8}',x)[0])
df1 = df.drop_duplicates(subset='id',keep='first').drop('id', axis=1)
df1.to_csv('t2_1.txt',index=False,header=None)

对已给的数据样例,运行结果(t2_1.txt)内容:

/ DX4.0/A-1/10001271.pdf(3.0MB)
/ DX4.0/A-1/10004130.pdf(4.0MB)
/ DX4.0/A-1/10004131.pdf(3.0MB)

如有帮助,请点采纳

给点样例数据

list=[]
for data in txt:
  if data.ssid not in list:
    #读入
    list.append(data.ssid)
#否则不读入

这里给出python实现的伪代码:
打开文件,遍历每一行,针对每行数据正则提取出ssid码,并存入一个列表中,存之前检验列表内是否已有此码,没有则将此行写入一个新文件并将ssid码存入列表中,有则略过,这样遍历结束非重复的数据就写入到新文件中了

img

以上答案都有问题,我来回答一下,调换一下提问者给出的第1行和第4行测试数据的位置,你们就会发现,
以上代码都无法输出提问者想要的结果,这样就输出了第1行,很显然是不对的
/DX4.0/A-1/a_12090113.pdf(3.0MB)
/DX4.0/数据库12-2/12090113_ss.zip(4.0MB)
/DX4.0/数据库24-3/12981396_高等数学.pdf(3.0MB)
/DX4.0/A-1/12090113.pdf(3.0MB)
包含有ssid值的8位整数文件路径里提问者想要输出的是第1行,第2行,第4行中,文件名字符串最短的那个,而不是默认第1行中的那个
如果按照以上大家的给出的代码,不重复的的结果输出一定会包含/DX4.0/A-1/a_12090113.pdf(3.0MB)这行
很显然代码里一定需要使用键值-对替换操作,那么替换操作就需要判断文件名的长度大小
假如提问者的实际数据超过3GB,是一定要采用哈希切分文件来处理的,否则就可能内存溢出,
我已经在自己设计的大数据合并去重软件里加入正则功能

img

img

可以处理你的问题,我已实现了输出结果分离出,第1行和第2行保存到重复数据文件里,
第3行和第4行保存到不重复的数据文件里
而且可以轻松处理超过100GB以上文件(可以多文件批处理),
我的CSDN地址:https://blog.csdn.net/zhengzizhi?spm=1000.2115.3001.5343
如果你想自己写代码,没有思路,我给你一份处理过程出现的临时文件数据贴出来,方便你分析问题确定目标该如何用代码来实现,
以下临时数据第1列和第3列是一定要出现在临时文件里的:

img

提问者想要输出的是第3行和第4行中第3列的内容