用 Python 对比两个目录下的内容,并生成 Json 文件
生活随笔
收集整理的這篇文章主要介紹了
用 Python 对比两个目录下的内容,并生成 Json 文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、背景
兩個文件夾下,可能有相同名字的文件,也可能有不同名字的文件,相同名字的文件也有可能內容不同,因此需要對比,將結果輸出到 Json 文件。
二、思路
先獲取兩個目錄,然后分別遍歷目錄下的所有文件,將文件名加入文件列表,字符串拼接成新的文件路徑,加入路徑列表。
然后分別打開文件,通過計算文件哈希值來對比文件是否相同,將結果先存到字典中。因為兩個目錄下文件數量可能不同,因此需要考慮如果某個目錄下的文件數多于另一個目錄的文件數,那么必定是不相同,需要單獨存到字典中。
最后,將字典里的內容輸出到 Json 文件。
三、代碼
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和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)# 兩個路徑下的文件數量不同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)四、結果
test1 和 test2 兩個文件夾下的內容如下圖所示:
其中,0.py 文件里面內容都一樣,1.py 文件里面內容不相同,2.txt 只有單獨的一個。
運行此程序前需要在程序所在目錄下新建一個 test_data.json 文件,然后運行程序,打開 json 文件,可以查看到以下內容:
{"0.py": true, "1.py": false, "2.txt": false}五、需要改進的地方
- 只考慮文件目錄一層結構,如果目錄下面還有二級目錄,怎么繼續判斷二級目錄下的內容是否相同?
- 是否可以同步更新兩個目錄下的內容,保證一致性?
總結
以上是生活随笔為你收集整理的用 Python 对比两个目录下的内容,并生成 Json 文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python对文件中的关键词查找替换,实
- 下一篇: Python函数的递归调用