Python 實(shí)現(xiàn)指定目錄內(nèi)重復(fù)文件統(tǒng)計(jì)

實(shí)現(xiàn)存儲(chǔ)目錄內(nèi)重復(fù)文件以及重復(fù)文件個(gè)數(shù)的統(tǒng)計(jì)从祝,輸出統(tǒng)計(jì)文件


#!/usr/bin/python

# -*- coding: UTF-8 -*-

import os

import datetime

import platform

import sys

import? hashlib

def CalcFileSha256(filname):

''' calculate file sha256 '''

? ? bufsize =1024 *1024 *16

? ? with open(filname,"rb")as f:

sha256obj = hashlib.sha256()

while True:

data = f.read(bufsize)

if data? ==None or len(data) ==0:

break

? ? ? ? ? ? sha256obj.update(data)

hash_value = sha256obj.hexdigest()

return hash_value

class CoSailTextFile():

def __init__(self, filename =None):

self.filename = filename

self.f =None

? ? def open(self, m):

try:

self.f = open(self.filename, m)

except Exceptionas e:

print(e)

self.f =None

return False

return True

? ? def writeLine(self, line):

try:

self.f.write(line +"\n")

return True

? ? ? ? except Exceptionas? e:

print(e)

return False

? ? def writeLines(self, lines):

for linein lines:

if self.writeLine(line) ==False:

return False

return True

? ? def readLine(self):

text =None

? ? ? ? try:

text = self.f.readline()

except Exceptionas e:

print(e)

return None

? ? ? ? return text

def readAll(self):

return self.f.read()

def readLines(self):

return self.f.readlines()

def close(self):

if self.f !=None:

try:

self.f.close()

self.f =None

? ? ? ? ? ? except Exceptionas e:

print(e)

return False

return True

return True

? ? def isOpen(self):

return self.f !=None

def getFilePathExtend(fileName):

filePath, suffix = os.path.splitext(fileName)

filePath = os.path.dirname(fileName)

l = len(suffix)

fileName = os.path.split(fileName)[1]

return filePath,? suffix[1:l +1], fileName

filesdict = {}

def scansamenamefile(path):

if os.path.exists(path) ==False:

print("Store Path :" + path +" isn't exist!")

return None

? ? try:

files = os.listdir(path)

except FileNotFoundError:

print("File Not FoundError")

return None

? ? for fiin files:

# file full path

# sleep 1

# time.sleep(1)

? ? ? ? fi_d = os.path.join(path, fi)

samefilelist =None

? ? ? ? # is directory

? ? ? ? if os.path.isdir(fi_d):

if os.path.islink(fi_d):

continue

? ? ? ? ? ? """ recursion"""

? ? ? ? ? ? scansamenamefile(fi_d)

# print("dir = ", fi_d)

# is file

? ? ? ? else:

file_path, suffix, file_name = getFilePathExtend(fi_d)

tmpfullpath = file_path +"/" + file_name

try:

samefilelist = filesdict[file_name]

except Exceptionas e:

print(e)

samefilelist =None

? ? ? ? ? ? if samefilelist ==None:

samefilelist = []

filesdict[file_name] = samefilelist

fileattrdict = {}

fileattrdict["filepath"] = tmpfullpath

fileattrdict["size"] = os.path.getsize(tmpfullpath)

fileattrdict["sha256"] = CalcFileSha256(tmpfullpath)

samefilelist.append(fileattrdict)

return filesdict

def statallfiles(d):

v =0;

o =None

? ? for kin d:

o = d[k]

v += len(o)

return v

def statsamenamefiles(d):

v =0;

o =None

? ? for kin d:

o = d[k]

if len(o) >=2:

v +=1

? ? return v

def outduplicatefilemsg(d, textFile):

v =0;

o =None

? ? textFile.writeLine("")

textFile.writeLine("**************Duplicate file list*****************")

for kin d:

o = d[k]

if len(o) >=2:

textFile.writeLine("")

txt ="file name : " + k +" Duplicate : " +str(len(o))

textFile.writeLine(txt)

txt ="file list :"

? ? ? ? ? ? for objin o:

txt ="fileputh :" + obj["filepath"] +" size : " + str(obj["size"]) +" SHA256 = " + obj["sha256"]

textFile.writeLine(txt)

def outonefilemsg(d, textFile):

v =0;

o =None

? ? textFile.writeLine("")

textFile.writeLine("**************Unique file list*****************")

for kin d:

o = d[k]

if len(o) ==1:

for objin o:

txt ="fileputh :" + obj["filepath"] +" size : " + str(obj["size"])

textFile.writeLine(txt)

def statpathfileattr(pathlistfilename, logpath):

"""

? ? :param pathlistfilename:? 要統(tǒng)計(jì)的文件目錄列表名胚股,每行一個(gè)目錄? ? :param logpath 日志文件路徑:return:

"""

? ? """

"""

? ? if logpathis None:

"""

? ? ? ? 如果日志路徑為空胰舆,則以輸入文件列表路徑為日志存儲(chǔ)路徑"""

? ? ? ? logpath, _, _= getFilePathExtend(pathlistfilename)

if os.path.exists(pathlistfilename) ==False:

print("path list filename isn't exist!")

return

? ? if os.path.exists(logpath) ==False:

print("log path isn't exist")

return

? ? f = CoSailTextFile(pathlistfilename)

f.open("r")

lines = f.readLines()

for linein lines:

line = line.strip('\n')

statpathfileattrbypath(line, logpath)

def statpathfileattrbypath(path, logpath):

"""

? ? 統(tǒng)計(jì)指定路徑的文件數(shù)量以及重復(fù)文件,并輸出統(tǒng)計(jì)信息

? ? :param path: 要統(tǒng)計(jì)的路徑? ? :param logpath: 統(tǒng)計(jì)信息存儲(chǔ)路基

:return:

"""

? ? d = scansamenamefile(path)

if d ==None :

return

? ? print("allfiles", statallfiles(d))

print("sameallfiles", statsamenamefiles(d))

t = path.replace("/","-");

t = t.replace("\\","-");

t = t.replace(":","")

if (platform.system() =='Windows'):

pass

? ? elif (platform.system()=='Linux'):

t = t[1:]

lonfilename = logpath +"/" + t + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S') +".log"

? ? lonfilename = lonfilename.replace("http://","/")

f = CoSailTextFile(lonfilename)

f.open("w")

f.writeLine("stat path : " + path)

f.writeLine("all files : " + str(statallfiles(d)))

f.writeLine("Duplicate files : " + str(statsamenamefiles(d)))

outduplicatefilemsg(d, f)

outonefilemsg(d, f)

f.close()

#print("file_name : ", file_path + "/" + file_name)

if __name__ =='__main__':

filesdict.clear()

filesdict={}

argv = sys.argv

print(argv)

if (len(argv) ==3):

statpathfileattr(argv[1], argv[2])

elif (len(argv) ==2):

statpathfileattr(argv[1],None)

else:

statpathfileattr("E:/1.txt","E:/")

print(type(CalcFileSha256("E:/gsl2.4.zip")))

sha2561 =CalcFileSha256("E:/gsl2.4.zip")

sha2562 = CalcFileSha256("E:/1.txt")

if (sha2561 == sha2562):

print("true")

print(sha2562)

print(sha2561)

#d = buildfilenamedictformfilelist("/home/hadoop/tmp/dir-and-files.list")

? ? """存儲(chǔ)目的路徑根目錄"""

"""

destrootpath = "/home/hadoop/tmp4"

path = "E:/data"

d =? scansamenamefile(path)

print(d)

for k in d:

print("key =", k)

print("files = ", len(d[k]))

print("allfiles", statallfiles(d))

print("sameallfiles", statsamenamefiles(d))

f = CoSailTextFile("e:/sss.log")

f.open("w")

f.writeLine("stat path : " + path)

f.writeLine("all files : " + str(statallfiles(d)))

f.writeLine("Duplicate files : " +str(statsamenamefiles(d)))

outduplicatefilemsg(d, f)

outonefilemsg(d, f)

f.close()

f = CoSailTextFile("E:/1.txt")

f.open("r")

text = f.readLines()

print((text))

"""

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辟灰,隨后出現(xiàn)的幾起案子剂桥,更是在濱河造成了極大的恐慌,老刑警劉巖坯墨,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寂汇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捣染,警方通過查閱死者的電腦和手機(jī)骄瓣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耍攘,“玉大人榕栏,你說我怎么就攤上這事±俑鳎” “怎么了扒磁?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)式曲。 經(jīng)常有香客問我妨托,道長(zhǎng),這世上最難降的妖魔是什么检访? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮仔掸,結(jié)果婚禮上脆贵,老公的妹妹穿的比我還像新娘。我一直安慰自己起暮,他們只是感情好卖氨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著负懦,像睡著了一般筒捺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纸厉,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天系吭,我揣著相機(jī)與錄音,去河邊找鬼颗品。 笑死肯尺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的躯枢。 我是一名探鬼主播则吟,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼锄蹂!你這毒婦竟也來了氓仲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敬扛,沒想到半個(gè)月后晰洒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舔哪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年欢顷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捉蚤。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抬驴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缆巧,到底是詐尸還是另有隱情布持,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布陕悬,位于F島的核電站题暖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捉超。R本人自食惡果不足惜胧卤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拼岳。 院中可真熱鬧枝誊,春花似錦、人聲如沸惜纸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耐版。三九已至祠够,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粪牲,已是汗流浹背古瓤。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腺阳,地道東北人湿滓。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像舌狗,于是被迫代替她去往敵國(guó)和親叽奥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

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