Python遞歸搜索目錄下的文件并去重

非常簡(jiǎn)單的程序,只是考慮的比較多缴啡,寫的比較多=-=

設(shè)計(jì)思路

灰常簡(jiǎn)單

  1. 遞歸搜索目錄中的所有文件壁晒。
  2. 計(jì)算這些文件的MD5并存儲(chǔ)在“Dict”中。
  3. 如果“Dict”有此MD5值业栅,則將文件移動(dòng)到默認(rèn)文件夾(“./ Duplicates”)并重命名秒咐。

考慮到的小細(xì)節(jié)

  1. 大文件以塊的形式讀取。
  2. 重復(fù)文件移動(dòng)名稱較長(zhǎng)的文件碘裕。
  3. 重命名時(shí)携取,在原來的名稱中添加一個(gè)數(shù)字。
  4. 不要更改后綴名(如果有)

The end =-=

代碼

程序和說明已經(jīng)公布在github
https://github.com/atlasbioinfo/SearchDuplicateFiles

from os import walk,path,mkdir
from hashlib import md5
from shutil import copy,move

def getMd5(fname):
    m = md5()
    with open(fname,'rb') as fobj:
        while True:
            data = fobj.read(4096)
            if not data:
                break
            m.update(data)

    return m.hexdigest()

if __name__ == '__main__':
    #默認(rèn)把重復(fù)文件移動(dòng)到這個(gè)文件夾帮孔,可以自定義名字
    #Default to move the duplicate file to this folder and can customize the name
    dupDir="Duplications"
    mkdir(dupDir)
    mdFile={}
    fileName={}
    for fpath,dirs,fs in walk('.'):
        for f in fs:
            tfile=path.join(fpath,f)
            if (path.samefile(fpath,dupDir)):
                continue
            tMD=getMd5(tfile)
            if (tMD in mdFile):
                mdFile[tMD]+=1
                if (len(f)>len(path.basename(fileName[tMD]))):
                    move(tfile,path.join(dupDir,path.splitext(f)[0]+str(mdFile[tMD])+path.splitext(f)[1]))
                    
                else:
                    tname=path.basename(fileName[tMD])
                    move(fileName[tMD],path.join(dupDir,path.splitext(tname)[0]+str(mdFile[tMD])+path.splitext(tname)[1]))
                    fileName[tMD]=tfile
                    
            else:
                mdFile[tMD]=1
                fileName[tMD]=tfile


舉個(gè)例子Example

ORI:
    temp.py
    temp_copy.py
    temp_2.py

After deduplicate......

Retain:
    temp.py
Moved:
    temp_copy2.py
    temp_23.py
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雷滋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子文兢,更是在濱河造成了極大的恐慌晤斩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姆坚,死亡現(xiàn)場(chǎng)離奇詭異澳泵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兼呵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門兔辅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人击喂,你說我怎么就攤上這事维苔。” “怎么了懂昂?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蕉鸳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我忍法,道長(zhǎng)潮尝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任饿序,我火速辦了婚禮勉失,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘原探。我一直安慰自己乱凿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布咽弦。 她就那樣靜靜地躺著徒蟆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪型型。 梳的紋絲不亂的頭發(fā)上段审,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音闹蒜,去河邊找鬼寺枉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绷落,可吹牛的內(nèi)容都是我干的姥闪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼砌烁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼筐喳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起函喉,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤避归,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后函似,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體槐脏,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年撇寞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顿天。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蔑担,死狀恐怖牌废,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情啤握,我是刑警寧澤鸟缕,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響懂从,放射性物質(zhì)發(fā)生泄漏授段。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一番甩、第九天 我趴在偏房一處隱蔽的房頂上張望侵贵。 院中可真熱鬧,春花似錦缘薛、人聲如沸窍育。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)漱抓。三九已至,卻和暖如春恕齐,著一層夾襖步出監(jiān)牢的瞬間乞娄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工檐迟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留补胚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓追迟,卻偏偏與公主長(zhǎng)得像溶其,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敦间,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 常用模塊 認(rèn)識(shí)模塊 什么是模塊 什么是模塊廓块? 常見的場(chǎng)景:一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件厢绝,文...
    go以恒閱讀 1,947評(píng)論 0 6
  • 當(dāng)數(shù)據(jù)量增大到超出了單個(gè)物理計(jì)算機(jī)存儲(chǔ)容量時(shí),有必要把它分開存儲(chǔ)在多個(gè)不同的計(jì)算機(jī)中带猴。那些管理存儲(chǔ)在多個(gè)網(wǎng)絡(luò)互連的...
    單行線的旋律閱讀 1,920評(píng)論 0 7
  • 娜拉出走以后昔汉,完全有機(jī)會(huì)過上和以前截然不同的生活。 在《玩偶之家》里拴清,娜拉和丈夫之間并不是平等且互相尊重的關(guān)系靶病,而...
    翙斐閱讀 1,549評(píng)論 0 5
  • 最近裳涛,關(guān)于“求職被騙入傳銷而喪命的應(yīng)屆畢業(yè)生”新聞應(yīng)接不暇,為生命惋惜的同時(shí)也發(fā)人深省众辨,相關(guān)單位也開始大張旗鼓整頓...
    劉二丫兒閱讀 247評(píng)論 0 0
  • 撇捺間連成世界 我追問什么是人 無知而后覺 漸行漸遠(yuǎn) 沒有心痛的經(jīng)歷 何苦執(zhí)著 爬上高山意為頂 生命最終化塵歸...
    顧純熙閱讀 239評(píng)論 0 3