citespace數(shù)據(jù)處理:用python對(duì)Ref文檔進(jìn)行去重方式
python對(duì)Ref文檔進(jìn)行去重
首先將txt文檔提取到Excel表格中篩選出重復(fù)項(xiàng),并且整理到txt中:
需要去重的目標(biāo)txt也準(zhǔn)備好:
接下來(lái)運(yùn)行代碼,注意代碼中的路徑需要自己按實(shí)際情況修改:
#coding:utf-8 #__author__ ='pig' # 實(shí)現(xiàn)去重功能 import re # 需要去重的標(biāo)題列表 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={} # 標(biāo)題列表 title_list = [] f1=open('D:\Desktop\數(shù)據(jù)\\sum.txt',encoding='utf-8') data=f1.readlines() # print data1 f1.close() num = 0 # 第一次遍歷:構(gòu)建字典,能看出每篇文章出現(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 # 第二次遍歷:將文本寫(xiě)入新文件(每篇文章數(shù)據(jù)整段寫(xiě)入),對(duì)于每篇文章,若出現(xiàn)在黑名單中,則需要跳過(guò),直到最后一次出現(xiàn)才寫(xiě)入 for index,line in enumerate(data): # 每篇文章先判定 if line[0:2] == 'RT': # 定位至標(biāo)題行 index_1 = index while(data[index_1][0:2] != 'T1'): index_1 += 1 # 提取標(biāo)題 title = data[index_1][3:] # 如果在黑名單里且不是最后一次出現(xiàn),則跳過(guò)此文章,并將字典中次數(shù)-1 if title in title_need_delete and dict[title][0] > 1: # print('跳過(guò):'+ title) dict[title][0] -= 1 delete_num += 1 # 跳過(guò) continue else : # 不在黑名單中則正常寫(xiě) 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("刪除重復(fù)數(shù)據(jù):" + str(delete_num)) print("剩余數(shù)據(jù):" + str(after_num)) f2.close()
運(yùn)行結(jié)果:
Python文件自動(dòng)去重
平日里一來(lái)無(wú)聊,二來(lái)手巧,果然下載了好多資料,搞得我小小的硬盤(pán)(已經(jīng)擴(kuò)到6T了)捉襟見(jiàn)肘,
有次無(wú)意間,發(fā)現(xiàn)有兩個(gè)居然長(zhǎng)得一毛一樣,在房子這么小的情況下,我怎能忍兩個(gè)一毛一樣的東西躺在我的硬盤(pán)里,果斷搞掉一個(gè),整理一下,本來(lái)想文件名一樣的就保留一份,但問(wèn)題出現(xiàn)了,居然有名字一樣,內(nèi)容卻完全不一樣的文件,想我背朝黃土面朝天吹著空調(diào)吃著西瓜下載下來(lái)的東西,刪除是不可能的,這輩子都是不可能刪除的??墒俏乙灿植荒馨堰@數(shù)以億計(jì)的文件挨個(gè)打開(kāi)看看里面一樣不一樣吧,這個(gè)工程我大概夠我做了好久好久了,有沒(méi)有辦法搞個(gè)軟件幫幫我呢,答案是肯定的,要不然我也不用在這里寫(xiě)這個(gè)博客了(應(yīng)該是苦逼的一個(gè)一個(gè)打開(kāi)比較吧),說(shuō)正題,Python提供了一個(gè)比較文件內(nèi)容的東西,那就是哈希算法
MD5消息摘要算法(英語(yǔ):MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個(gè)128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。MD5由美國(guó)密碼學(xué)家羅納德·李維斯特(Ronald Linn Rivest)設(shè)計(jì),于1992年公開(kāi),用以取代MD4算法。
說(shuō)了這么長(zhǎng),總結(jié)出來(lái)就一句,這玩意就是文件的指紋,幾乎每個(gè)文件是唯一的(碰到重復(fù)的,恭喜你,可以去買彩票了),那我們就把這個(gè)指紋拿出來(lái),一個(gè)一個(gè)比對(duì),肯定不能會(huì)有漏網(wǎng)的文件,既不會(huì)錯(cuò)殺三千,也不使一文件漏網(wǎng),原理上通了,那么我們就要去搞個(gè)代碼來(lái)幫我完成這個(gè)工作,作為最好用的語(yǔ)言,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("重復(fù):%s" % a) else: md5list.append(md5) print("一共%s張照片" % len(md5list))
效果
這戰(zhàn)斗力杠杠的,啥叫科技改變生活,此之謂也
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python3多線程知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給各位分享的是關(guān)于python3多線程的相關(guān)知識(shí)點(diǎn)內(nèi)容,以后需要的朋友們可以參考下。2019-09-09numpy中數(shù)組拼接、數(shù)組合并方法總結(jié)(append(),?concatenate,?hstack,?vstack
numpy庫(kù)是一個(gè)高效處理多維數(shù)組的工具,可以在進(jìn)行邊寫(xiě)的數(shù)組計(jì)算上進(jìn)行一系列的操作,下面這篇文章主要給大家介紹了關(guān)于numpy中數(shù)組拼接、數(shù)組合并方法(append(),?concatenate,?hstack,?vstack,?column_stack,?row_stack,?np.r_,?np.c_等)的相關(guān)資料,需要的朋友可以參考下2022-08-08如何用Python數(shù)據(jù)可視化來(lái)分析用戶留存率
今天和大家來(lái)分享一些數(shù)據(jù)可視化方向的干貨,我們來(lái)嘗試用Python來(lái)繪制一下“漏斗圖”,感興趣的小伙伴和小編一起進(jìn)入課題吧,但愿大家會(huì)有所收獲2021-09-09python里的條件語(yǔ)句和循環(huán)語(yǔ)句你了解多少
這篇文章主要為大家詳細(xì)介紹了python的條件語(yǔ)句和循環(huán)語(yǔ)句,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Numpy中array數(shù)組對(duì)象的儲(chǔ)存方式(n,1)和(n,)的區(qū)別
本文主要介紹了Numpy中array數(shù)組對(duì)象的儲(chǔ)存方式(n,1)和(n,)的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04scrapy爬蟲(chóng)遇到j(luò)s動(dòng)態(tài)渲染問(wèn)題
本文主要介紹了scrapy爬蟲(chóng)遇到j(luò)s動(dòng)態(tài)渲染問(wèn)題,通過(guò)js渲染出來(lái)的動(dòng)態(tài)網(wǎng)頁(yè)的內(nèi)容與網(wǎng)頁(yè)文件內(nèi)容是不一樣的,本文就來(lái)解決一下這些問(wèn)題,感興趣的可以了解一下2022-05-05Python使用騰訊云API實(shí)現(xiàn)短信驗(yàn)證碼功能
使用Python與騰訊云接口對(duì)接,實(shí)現(xiàn)短信驗(yàn)證碼功能變得非常簡(jiǎn)單,只需要幾行代碼就能夠輕松實(shí)現(xiàn)短信的發(fā)送,無(wú)須關(guān)心復(fù)雜的短信協(xié)議和底層實(shí)現(xiàn),讀者可以根據(jù)自己的實(shí)際需求,靈活使用騰訊云短信SDK提供的API來(lái)實(shí)現(xiàn)更豐富的短信功能2024-01-01Python讀取DataFrame的某行或某列的方法實(shí)現(xiàn)
Dataframe是Python中一種重要的數(shù)據(jù)處理工具,它能夠以表格形式存儲(chǔ)并處理數(shù)據(jù),本文主要介紹了Python讀取DataFrame的某行或某列的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04