亲宝软件园·资讯

展开

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

Mr.Bean-Pig 人气:0

python对Ref文档进行去重

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

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

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

#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)
# 一键多值字典0
dict={}

# 标题列表
title_list = []

f1=open('D:\Desktop\数据\\sum.txt',encoding='utf-8')
data=f1.readlines()
# print data1
f1.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 = 0
after_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):
                    break
print("去重完成!")
print("删除重复数据:" + str(delete_num))
print("剩余数据:" + str(after_num))
f2.close()

运行结果:

Python文件自动去重

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

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

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

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

代码如下

# -*- coding:utf-8 -*-
 
import os
import hashlib
import time
import sys
#搞到文件的MD5
def 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))

效果

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

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

加载全部内容

相关教程
猜你喜欢
用户评论