[Python代码]两目录文件对比程序
两目录文件对比程序的需求是:由于本人移动硬盘中存放着电脑上文件的备份,为了在某些时刻使部分文件夹下内容相同,因此制作了这个程序查看两目录下不同的文件,方便同步备份。
输入:两个目录路径。格式可以是F:, F:\, F:\temp, F:\temp\等。
输出:记录有不同文件的文件名的文本
函数:
get_file_info_list
:取得某目录下所有文件的文件信息(大小和最后修改时间)列表。
file_contrast
:两个目录下的文件对比,返回记录有不同文件的文件名列表。
add_root_path
:为文件名添加前缀(之前为了比较删除了输入的前缀)。
format_path
:确保输入以“\”结尾。
write_file
:写文件。
下面是完整的Python实现脚本程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# -*- coding: gbk -*- # Example Input: F:\, F:\temp import os def get_file_info_list(path): file_info_list = {} for root, dir_list, file_list in os.walk(path): for file_name in file_list: cur_file = os.path.join(root, file_name) # Added try-except to prevent "windows error" causing by filename parsing error try: file_stat = os.stat(cur_file) file_info = { 'file_size': file_stat[-4], 'file_mtime': file_stat[-2], } file_info_list[cur_file.replace(path, '', 1)] = file_info except: print "Error: " + cur_file return file_info_list def file_contrast(path1, path2): file_info_list1 = get_file_info_list(path1) file_info_list2 = get_file_info_list(path2) for fi in file_info_list1.keys(): if fi in file_info_list2.keys(): if file_info_list1[fi] == file_info_list2[fi]: del file_info_list1[fi] del file_info_list2[fi] different_files = add_root_path(path1, file_info_list1) different_files += add_root_path(path2, file_info_list2) different_files.sort() return different_files def add_root_path(path, file_info_list): return [os.path.join(path, name) for name in file_info_list.keys()] def format_path(path): return path.rstrip('\\') + '\\' def write_file(content): with open("file_contrast_result.txt", "w") as f: f.writelines([line + os.linesep for line in content]) print "Done!" if __name__ == '__main__': path1 = format_path(raw_input('Please input PATH 1: ')) path2 = format_path(raw_input('Please input PATH 2: ')) write_file(file_contrast(path1, path2)) |
本文内容遵从CC3.0版权协议,转载请注明:转自Pythoner
本文链接地址:[Python代码]两目录文件对比程序
楼主可以采用filecmp模块
谢谢,果然我又自己造轮子了
楼主,你还在么?
如果我想比较文件夹1和文件夹2里的pdf文档是否有重复,并把重复的文件清单列出来(显示在生成的txt中),该如何操作呢?急盼回复:)
对取到的文件名判断下扩展名是否是pdf的,只比较pdf的
楼主,还在吗?急求源码
是指write_file那个函数么?