日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

用 Python 对比两个目录下的内容,并生成 Json 文件

發(fā)布時間:2025/3/20 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用 Python 对比两个目录下的内容,并生成 Json 文件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、背景

兩個文件夾下,可能有相同名字的文件,也可能有不同名字的文件,相同名字的文件也有可能內(nèi)容不同,因此需要對比,將結(jié)果輸出到 Json 文件。

二、思路

先獲取兩個目錄,然后分別遍歷目錄下的所有文件,將文件名加入文件列表,字符串拼接成新的文件路徑,加入路徑列表。

然后分別打開文件,通過計算文件哈希值來對比文件是否相同,將結(jié)果先存到字典中。因為兩個目錄下文件數(shù)量可能不同,因此需要考慮如果某個目錄下的文件數(shù)多于另一個目錄的文件數(shù),那么必定是不相同,需要單獨存到字典中。

最后,將字典里的內(nèi)容輸出到 Json 文件。

三、代碼

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' import hashlib import os import jsondic = {}def getHash(f):"""獲取文件哈希值f:文件"""line = f.readline()hash = hashlib.md5()while(line):hash.update(line)line = f.readline()return hash.hexdigest()def IsHashEqual(f1,f2):"""比較哈希值是否相同f1:第一個文件f2:第二個文件"""str1 = getHash(f1)str2 = getHash(f2)return str1 == str2def CountFiles(path1, path2):"""比較文件"""path_1, path_2 = [], []file_dir1, file_dir2 = [], []# 獲取 path1 路徑下的所有文件for file in os.listdir(path1):file_dir1.append(file)# print(file)tmp_path1 = path1 + str(file)# print(path1)path_1.append(tmp_path1)# 獲取 path2 路徑下的所有文件for file in os.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)for i in range(min(len1, len2)):file1 = open(path_1[i], "rb")file2 = open(path_2[i], "rb")res = IsHashEqual(file1, file2)dic[file_dir1[i]] = res# print(dic)# 兩個路徑下的文件數(shù)量不同if len1 < len2:for i in range(len1, len2):dic[file_dir2[i]] = Falseelif len1 > len2:for i in range(len2, len1):dic[file_dir1[i]] = False# 寫入 json 文件js = json.dumps(dic)with open('test_data.json', 'w') as json_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)

四、結(jié)果

test1 和 test2 兩個文件夾下的內(nèi)容如下圖所示:

其中,0.py 文件里面內(nèi)容都一樣,1.py 文件里面內(nèi)容不相同,2.txt 只有單獨的一個。

運(yùn)行此程序前需要在程序所在目錄下新建一個 test_data.json 文件,然后運(yùn)行程序,打開 json 文件,可以查看到以下內(nèi)容:

{"0.py": true, "1.py": false, "2.txt": false}

五、需要改進(jìn)的地方

  • 只考慮文件目錄一層結(jié)構(gòu),如果目錄下面還有二級目錄,怎么繼續(xù)判斷二級目錄下的內(nèi)容是否相同?
  • 是否可以同步更新兩個目錄下的內(nèi)容,保證一致性?

總結(jié)

以上是生活随笔為你收集整理的用 Python 对比两个目录下的内容,并生成 Json 文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。