Python檢測(cè)不同目錄下文件是否相同(代碼有bug)

參考大神鏈接

Python中的sys.argv[]

主要用于接受命令行的參數(shù),×sys.argv[0]表示代碼本身文件路徑×书斜,所以參數(shù)從1開(kāi)始

1.這里的File_Compare.py是代碼本身的文件路徑擂煞,參數(shù)是caffe 和cuda兩個(gè)目錄

比如,shell下運(yùn)行結(jié)果:


圖片.png

2.使用sys.argv[]進(jìn)行讀取參數(shù)的代碼

import sys
if len(sys.argv)<3:
    print "You need t specify two directories:"
    print sys.argv[0],"<directory1> <directory2>"
    sys.exit()

directory1=sys.argv[1]
directory2=sys.argv[2]

print "Comparing:"
print directory1
print directory2
print

3.函數(shù)聲明:walk(top,topdown=True,onerror=None)

1>參數(shù)top表示需要遍歷的目錄樹(shù)的路徑
2>參數(shù)topdown的默認(rèn)值是"True",表示首先返回目錄樹(shù)下的文件混弥,然后在遍歷目錄樹(shù)的子目錄.Topdown的值為"False"時(shí),則表示先遍歷目錄樹(shù)的子目錄对省,
返回子目錄下的文件蝗拿,最后返回根目錄下的文件
3>參數(shù)onerror的默認(rèn)值是"None",表示忽略文件遍歷時(shí)產(chǎn)生的錯(cuò)誤.如果不為空,則提供一個(gè)自定義函數(shù)提示錯(cuò)誤信息后繼續(xù)遍歷或拋出異常中止遍歷
4>該函數(shù)返回一個(gè)元組蒿涎,該元組有3個(gè)元素哀托,這3個(gè)元素分別表示每次遍歷的路徑名,目錄列表和文件列表
示例:

import os
#don't loop the code ,make the code best use
for directory in [directory1,directory2]:
    #check the imput if lawful
    if not os.access(directory, os.F_OK):
        print directory,"isn't a valid directory !"
        sys.exit()
    print "Directory",directory
    #ergodic the dorectory
    for iterm in os.walk(directory):
        print iterm
    print 
運(yùn)行結(jié)果

分析:從根目錄開(kāi)始輸出一級(jí)目錄以及在根目錄下的文件劳秋,遞歸類似仓手。

4.os.access()

1>access()方法語(yǔ)法格式如下:
os.access(path, mode);
2>參數(shù)

path -- 要用來(lái)檢測(cè)是否有訪問(wèn)權(quán)限的路徑。

mode -- mode為F_OK玻淑,測(cè)試存在的路徑嗽冒,或者它可以是包含R_OK, W_OK和X_OK或者R_OK, W_OK和X_OK其中之一或者更多。
    os.F_OK: 作為access()的mode參數(shù)补履,測(cè)試path是否存在添坊。
    os.R_OK: 包含在access()的mode參數(shù)中 , 測(cè)試path是否可讀箫锤。
    os.W_OK 包含在access()的mode參數(shù)中 贬蛙, 測(cè)試path是否可寫(xiě)。
    os.X_OK 包含在access()的mode參數(shù)中 谚攒,測(cè)試path是否可執(zhí)行阳准。
import sys
if len(sys.argv)<3:
    print "You need t specify two directories:"
    print sys.argv[0],"<directory1> <directory2>"
    sys.exit()

directory1=sys.argv[1]
directory2=sys.argv[2]

print "Comparing:"
print directory1
print directory2
print

import os
#don't loop the code ,make the code best use
for directory in [directory1,directory2]:
    #check the imput if lawful
    if not os.access(directory, os.F_OK):
        print directory,"isn't a valid directory !"
        sys.exit()
    print "Directory",directory
    #ergodic the dorectory
    for iterm in os.walk(directory):
        print iterm
    print 

import hashlib
def md5(file_path):
    """Return an md5 for a file """
    if os.path.isdir(file_path):
        return '1'
    read_file=file(file_path)
    the_hash=hashlib.md5()
    for line in read_file.readlines():
        the_hash.update(line)
    return the_hash.hexdigest()

def directory_listing(dir_name):
    """Return all of the file inn a directory. """
    dir_file_list={}
    dir_root=None
    dir_trim=0
    #find out the root
    for path,dirs,files in os.walk(dir_name):
        if dir_root is None:
            dir_root=path

        dir_trim=len(dir_root)
        print "dir ",dir_name,
        print "root is ",dir_root
    trimmed_path=path[dir_trim:]
    if trimmed_path.startswith(os.path.sep):
        trimmed_path=trimmed_path[1:]
    for each_file in files+dirs:
        file_path=os.path.join(trimmed_path,each_file)
        dir_file_list[file_path]=True
    return (dir_file_list,dir_root)

#main function
dir1_file_list,dir1_root=directory_listing(directory1)
dir2_file_list,dir2_root=directory_listing(directory2)
result={}

for file_path in dir2_file_list.keys():
    if file_path not in dir1_file_list:
        print file_path,"not found in the dirrectory1"
    else:
        print file_path,"found in the directory1 and 2 "
        file1=os.path.join(dir1_root,file_path)
        file2=os.path.join(dir2_root,file_path)
        if md5(file1) != md5(file2):
            result[file_path]="differ !"
        else:
            result[file_path]="is the same in the both"
        del dir1_file_list[file_path]

for file_path,value in dir1_file_list.items():
    if file_path not in result:
        result[file_path]="not found  in directory2 !"
print 
for file_path,result_one in sorted(result.items()):
    if os.path.sep not  in file_path and "same" not in result_one:
        print path,result

for path,result_one in sorted(result.items()):
    if os.path.sep in file_path and "same" not in result_one:
        print path,result_one

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市五鲫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岔擂,老刑警劉巖位喂,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異乱灵,居然都是意外死亡塑崖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)痛倚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)规婆,“玉大人,你說(shuō)我怎么就攤上這事∈阊粒” “怎么了掘鄙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嗡髓。 經(jīng)常有香客問(wèn)我操漠,道長(zhǎng),這世上最難降的妖魔是什么饿这? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任浊伙,我火速辦了婚禮,結(jié)果婚禮上长捧,老公的妹妹穿的比我還像新娘嚣鄙。我一直安慰自己,他們只是感情好串结,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布哑子。 她就那樣靜靜地躺著,像睡著了一般奉芦。 火紅的嫁衣襯著肌膚如雪赵抢。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天声功,我揣著相機(jī)與錄音烦却,去河邊找鬼。 笑死先巴,一個(gè)胖子當(dāng)著我的面吹牛其爵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伸蚯,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼摩渺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了剂邮?” 一聲冷哼從身側(cè)響起摇幻,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挥萌,沒(méi)想到半個(gè)月后绰姻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡引瀑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年狂芋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憨栽。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帜矾,死狀恐怖翼虫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屡萤,我是刑警寧澤珍剑,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站灭衷,受9級(jí)特大地震影響次慢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翔曲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一迫像、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瞳遍,春花似錦闻妓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至猾蒂,卻和暖如春均唉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肚菠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工舔箭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚊逢。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓层扶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親烙荷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子镜会,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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