Python检测不同目录下文件是否相同(代码有bug)

参考大神链接

Python中的sys.argv[]

主要用于接受命令行的参数,×sys.argv[0]表示代码本身文件路径×,所以参数从1开始

1.这里的File_Compare.py是代码本身的文件路径,参数是caffe 和cuda两个目录

比如,shell下运行结果:


图片.png

2.使用sys.argv[]进行读取参数的代码

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.函数声明:walk(top,topdown=True,onerror=None)

1>参数top表示需要遍历的目录树的路径
2>参数topdown的默认值是"True",表示首先返回目录树下的文件,然后在遍历目录树的子目录.Topdown的值为"False"时,则表示先遍历目录树的子目录,
返回子目录下的文件,最后返回根目录下的文件
3>参数onerror的默认值是"None",表示忽略文件遍历时产生的错误.如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历
4>该函数返回一个元组,该元组有3个元素,这3个元素分别表示每次遍历的路径名,目录列表和文件列表
示例:

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 
运行结果

分析:从根目录开始输出一级目录以及在根目录下的文件,递归类似。

4.os.access()

1>access()方法语法格式如下:
os.access(path, mode);
2>参数

path -- 要用来检测是否有访问权限的路径。

mode -- mode为F_OK,测试存在的路径,或者它可以是包含R_OK, W_OK和X_OK或者R_OK, W_OK和X_OK其中之一或者更多。
    os.F_OK: 作为access()的mode参数,测试path是否存在。
    os.R_OK: 包含在access()的mode参数中 , 测试path是否可读。
    os.W_OK 包含在access()的mode参数中 , 测试path是否可写。
    os.X_OK 包含在access()的mode参数中 ,测试path是否可执行。
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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容