当前位置: 首页 > 后端技术 > Python

使用Python比较两个目录的内容,生成Json文件

时间:2023-03-26 13:05:23 Python

1.背景两个文件夹中可能存在同名或不同名的文件,同名的文件也可能有不同的内容。所以需要比较结果输出到Json文件中。2、思路是先获取两个目录,然后遍历目录下的所有文件,将文件名添加到文件列表中,将字符串拼接成新的文件路径,添加到路径列表中。然后分别打开文件,通过计算文件的哈希值比较文件是否相同,先将结果存入字典。因为两个目录下的文件数可能不同,所以需要考虑如果一个目录下的文件数多于另一个目录下的文件数,那么一定是不同的,需要存放在字典分开。最后将字典的内容输出到Json文件中。3.代码importhashlibimportosimportjsondic={}defgetHash(f):"""获取文件哈希值f:file"""line=f.readline()hash=hashlib.md5()while(line):hash。update(line)line=f.readline()returnhash.hexdigest()defIsHashEqual(f1,f2):"""比较hash值是否相同f1:第一个文件f2:第二个文件"""str1=getHash(f1)str2=getHash(f2)returnstr1==str2defCountFiles(path1,path2):"""比较文件"""path_1,path_2=[],[]file_dir1,file_dir2=[],[]#获取path1路径下的所有文件forfileinos.listdir(path1):file_dir1.append(file)#print(file)tmp_path1=path1+str(file)#print(path1)path_1.append(tmp_path1)#getpath2下的所有文件pathforfileinos.listdir(path2):file_dir2.append(file)#print(file)tmp_path2=path2+str(file)#print(path2)path_2.append(tmp_path2)len1,len2=len(path_1),len(path_2)foriinrange(min(len1,len2)):file1=打开(path_1[i],"rb")file2=打开(path_2[i],"rb")res=IsHashEqual(file1,file2)dic[file_dir1[i]]=res#print(dic)#两个路径的文件数不同iflen1len2:foriinrange(len2,len1):dic[file_dir1[i]]=False#writejsonfilejs=json.dumps(dic)withopen('test_data.json','w')asjson_file:json_file.write(js)if__name__=='__main__':#f1=open("D:/Code/Python/test1/0.py","rb")#f2=open("D:/Code/Python/test2/0.py","rb")#print(IsHashEqual(f1,f2))path1="D:/Code/Python/test1/"path2="D:/Code/Python/test2/"CountFiles(path1,path2)print(dic)4.结果test1和test2这两个文件夹的内容如下图所示:其中,0.py文??件中的内容相同,1.py文件中的内容不同,只有2.txt中的一个文件在运行这个程序之前,需要在程序所在目录新建一个test_data.json文件,然后运行程序,打开json文件,可以看到如下内容:{"0.py":true,"1.py":false,"2.txt":false}第五,需要改进的地方只考虑了文件目录的一级结构。如果目录下有二级目录,如何继续判断二级目录的内容是否相同?能否同步更新两个目录的内容,保证一致性?6.参考Python判断两个文件是否相同,过滤两个文本相同项。Python对象转json的步骤【Python】将字典内容写入json文件