citespace數(shù)據(jù)處理:用python對Ref文檔進行去重方式
python對Ref文檔進行去重
首先將txt文檔提取到Excel表格中篩選出重復項,并且整理到txt中:

需要去重的目標txt也準備好:

接下來運行代碼,注意代碼中的路徑需要自己按實際情況修改:
#coding:utf-8
#__author__ ='pig'
# 實現(xiàn)去重功能
import re
# 需要去重的標題列表
title_need_delete = []
f0 = open('D:\Desktop\數(shù)據(jù)\\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\數(shù)據(jù)\\sum.txt',encoding='utf-8')
data=f1.readlines()
# print data1
f1.close()
num = 0
# 第一次遍歷:構建字典,能看出每篇文章出現(xiàn)的次數(shù)
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:
# 修改該文章出現(xiàn)的次數(shù)
dict[title][0] += 1
#print(dict)
print("原數(shù)據(jù)量:"+str(num))
f2 = open('after_delete.txt', 'w', encoding='utf-8')
delete_num = 0
after_num = 0
# 第二次遍歷:將文本寫入新文件(每篇文章數(shù)據(jù)整段寫入),對于每篇文章,若出現(xiàn)在黑名單中,則需要跳過,直到最后一次出現(xiàn)才寫入
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:]
# 如果在黑名單里且不是最后一次出現(xiàn),則跳過此文章,并將字典中次數(shù)-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("刪除重復數(shù)據(jù):" + str(delete_num))
print("剩余數(shù)據(jù):" + str(after_num))
f2.close()運行結(jié)果:

Python文件自動去重
平日里一來無聊,二來手巧,果然下載了好多資料,搞得我小小的硬盤(已經(jīng)擴到6T了)捉襟見肘,
有次無意間,發(fā)現(xiàn)有兩個居然長得一毛一樣,在房子這么小的情況下,我怎能忍兩個一毛一樣的東西躺在我的硬盤里,果斷搞掉一個,整理一下,本來想文件名一樣的就保留一份,但問題出現(xiàn)了,居然有名字一樣,內(nèi)容卻完全不一樣的文件,想我背朝黃土面朝天吹著空調(diào)吃著西瓜下載下來的東西,刪除是不可能的,這輩子都是不可能刪除的??墒俏乙灿植荒馨堰@數(shù)以億計的文件挨個打開看看里面一樣不一樣吧,這個工程我大概夠我做了好久好久了,有沒有辦法搞個軟件幫幫我呢,答案是肯定的,要不然我也不用在這里寫這個博客了(應該是苦逼的一個一個打開比較吧),說正題,Python提供了一個比較文件內(nèi)容的東西,那就是哈希算法
MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,于1992年公開,用以取代MD4算法。
說了這么長,總結(jié)出來就一句,這玩意就是文件的指紋,幾乎每個文件是唯一的(碰到重復的,恭喜你,可以去買彩票了),那我們就把這個指紋拿出來,一個一個比對,肯定不能會有漏網(wǎng)的文件,既不會錯殺三千,也不使一文件漏網(wǎng),原理上通了,那么我們就要去搞個代碼來幫我完成這個工作,作為最好用的語言,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
#主函數(shù)
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))效果


這戰(zhàn)斗力杠杠的,啥叫科技改變生活,此之謂也
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python使用虛擬環(huán)境(安裝下載更新卸載)命令
這篇文章主要為大家介紹了Python使用虛擬環(huán)境(安裝下載更新卸載)命令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
基于Python+Matplotlib實現(xiàn)直方圖的繪制
Matplotlib是Python的繪圖庫,它能讓使用者很輕松地將數(shù)據(jù)圖形化,并且提供多樣化的輸出格式。本文將為大家介紹如何用matplotlib繪制直方圖,感興趣的朋友可以學習一下2022-04-04
解決在pycharm運行代碼,調(diào)用CMD窗口的命令運行顯示亂碼問題
今天小編就為大家分享一篇解決在pycharm運行代碼,調(diào)用CMD窗口的命令運行顯示亂碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python操作MongoDB數(shù)據(jù)庫PyMongo庫使用方法
這篇文章主要介紹了Python操作MongoDB數(shù)據(jù)庫PyMongo庫使用方法,本文講解了創(chuàng)建連接、連接數(shù)據(jù)庫、連接聚集、查看全部聚集名稱、查看聚集的一條記錄等操作方法,需要的朋友可以參考下2015-04-04

