首先将txt文档提取到Excel表格中筛选出重复项,并且整理到txt中:

citespace数据处理:用python对Ref文档进行去重方式

需要去重的目标txt也准备好:

citespace数据处理:用python对Ref文档进行去重方式

接下来运行代码,注意代码中的路径需要自己按实际情况修改:

#coding:utf-8#__author__ ='pig'# 实现去重功能import re# 需要去重的标题列表title_need_delete = []f0 = open('D:\Desktop\数据\\need_delete.txt',encoding='utf-8')for line in f0.readlines():    title_need_delete.append(line)#print(title_need_delete)# 一键多值字典0dict={}# 标题列表title_list = []f1=open('D:\Desktop\数据\\sum.txt',encoding='utf-8')data=f1.readlines()# print data1f1.close()num = 0# 第一次遍历:构建字典,能看出每篇文章出现的次数for index,line in enumerate(data):    if line[0:2] == 'T1':        num+=1        title = line[3:]        if title not in title_list:            # 向字典中添加新key            dict.setdefault(title,[]).append(1)            title_list.append(title)        else:            # 修改该文章出现的次数            dict[title][0] += 1#print(dict)print("原数据量:"+str(num))f2 = open('after_delete.txt', 'w', encoding='utf-8')delete_num = 0after_num = 0# 第二次遍历:将文本写入新文件(每篇文章数据整段写入),对于每篇文章,若出现在黑名单中,则需要跳过,直到最后一次出现才写入for index,line in enumerate(data):    # 每篇文章先判定    if line[0:2] == 'RT':        # 定位至标题行        index_1 = index        while(data[index_1][0:2] != 'T1'):            index_1 += 1        # 提取标题        title = data[index_1][3:]        # 如果在黑名单里且不是最后一次出现,则跳过此文章,并将字典中次数-1        if title in title_need_delete and dict[title][0] > 1:            # print('跳过:'+ title)            dict[title][0] -= 1            delete_num += 1            # 跳过            continue        else :            # 不在黑名单中则正常写            f2.writelines(data[index])            after_num += 1            index += 1            while(data[index][0:2] != 'RT'):                f2.writelines(data[index])                index += 1                if index == len(data):                    breakprint("去重完成!")print("删除重复数据:" + str(delete_num))print("剩余数据:" + str(after_num))f2.close()

运行结果:

citespace数据处理:用python对Ref文档进行去重方式

Python文件自动去重

平日里一来无聊,二来手巧,果然下载了好多资料,搞得我小小的硬盘(已经扩到6T了)捉襟见肘,

有次无意间,发现有两个居然长得一毛一样,在房子这么小的情况下,我怎能忍两个一毛一样的东西躺在我的硬盘里,果断搞掉一个,整理一下,本来想文件名一样的就保留一份,但问题出现了,居然有名字一样,内容却完全不一样的文件,想我背朝黄土面朝天吹着空调吃着西瓜下载下来的东西,删除是不可能的,这辈子都是不可能删除的。可是我也又不能把这数以亿计的文件挨个打开看看里面一样不一样吧,这个工程我大概够我做了好久好久了,有没有办法搞个软件帮帮我呢,答案是肯定的,要不然我也不用在这里写这个博客了(应该是苦逼的一个一个打开比较吧),说正题,Python提供了一个比较文件内容的东西,那就是哈希算法

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。

说了这么长,总结出来就一句,这玩意就是文件的指纹,几乎每个文件是唯一的(碰到重复的,恭喜你,可以去买彩票了),那我们就把这个指纹拿出来,一个一个比对,肯定不能会有漏网的文件,既不会错杀三千,也不使一文件漏网,原理上通了,那么我们就要去搞个代码来帮我完成这个工作,作为最好用的语言,Python就这样被我翻了牌子

代码如下

# -*- coding:utf-8 -*- import osimport hashlibimport timeimport sys#搞到文件的MD5def get_ms5(filename):    m = hashlib.md5()    mfile = open(filename , "rb")    m.update(mfile.read())    mfile.close()    md5_value = m.hexdigest()    return md5_value#搞到文件的列表def get_urllist():    base = ("D:\\lwj\\spider\\pic\\")#这里就是你要清缴的文件们了    list = os.listdir(base)    urllist = []    for i in list:        url = base + i        urllist.append(url)     return urllist#主函数if __name__ == '__main__':    md5list = []    urllist = get_urllist()    print("test1")    for a in urllist:        md5 = get_ms5(a)        if(md5 in md5list):            os.remove(a)            print("重复:%s" % a)        else:            md5list.append(md5)            print("一共%s张照片" % len(md5list))

效果

citespace数据处理:用python对Ref文档进行去重方式

citespace数据处理:用python对Ref文档进行去重方式

这战斗力杠杠的,啥叫科技改变生活,此之谓也

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文地址:https://blog.csdn.net/z714405489/article/details/112708628

相关文章: