Python 比较同一工程两个版本的文件
import string
import chardet
#==================================================================================
class compare_file_name():
_old_lists = [] # 旧文件列表解析,缓存中间表
_new_lists = [] # 新文件列表解析,缓存中间表
def _determine_input_path(self,hint):
'''
:function:检查输入路径是否正确,如果错误要求重新输入。
:param hint: 提示语
:return: 输入路径
'''
in_flag = True
while in_flag:
file_dir = input(hint + "\n")
dirve_letter = file_dir.split(':')[0] # 获取盘符
if dirve_letter not in string.ascii_uppercase: # 判断盘符:大写盘符
print("Path error !") # 提示路径错误,要求继续输入
continue
path_dir = file_dir.split(':')[1] # 获取路径
if path_dir[0] not in ['\\', '/']: # 判断路径前缀
print("Path error !") # 提示路径错误,要求继续输入
continue
if path_dir[len(path_dir) - 1] not in string.ascii_letters: # 判断路径后缀:大写字母、小写字母
print("Path error !") # 提示路径错误,要求继续输入
continue
in_flag = False # 输入正确,停止循环
return file_dir # 返回输入路径
def old_file_list(self):
'''接收"旧文件列表",初步加工后存入中间表'''
# old_file_list = input("Please input the file of old list file:" + "\n")
hint1 = "Please input the file of old list file:"
old_file_list = self._determine_input_path(hint=hint1) # 获取检验后的输入路径
print("The file you entered:" + old_file_list, end='\n')
# ————读取旧列表文件———
with open(old_file_list, 'r') as fp:
compare_file_name._old_lists = fp.read().split('\n')
def new_file_list(self):
'''接收 "新文件列表" ,初步加工后存入中间表'''
# new_file_list = input("Please input the file of new list file" + "\n")
hint2 = "Please input the file of new list file:"
new_file_list = self._determine_input_path(hint=hint2) # 获取检验后的输入路径
print("The file you entered:" + new_file_list, end='\n')
# ————读取新列表文件———
with open(new_file_list, 'r') as fp:
compare_file_name._new_lists = fp.read().split('\n')
def compare(self):
# ————定义变量———------
# old_file_names = [] # 旧文件列表
old_file_infos = []
# new_file_names = [] # 新文件列表
new_file_infos = []
file_adds = [] # 对比旧文件,新文件中添加项
file_dels = [] # 对比旧文件,新文件中删除项
file_versions =[] # 版本列表
# ————开始比较处理———------
print("Start comparison processing...", end='\n')
# ————解析“旧文件列表”———------
for old_list in compare_file_name._old_lists:
# old_file_names.append(old_list.split('>>')[1])
old_list_list = old_list.split('>>') # [0]:序号,[1]:文件名,[2]:版本,[3]:大小
old_file_infos.append([old_list_list[0], old_list_list[1], old_list_list[2], old_list_list[3]])
# ————解析“新文件列表”———------
for new_list in compare_file_name._new_lists:
# new_file_names.append(new_list.split('>>')[1])
new_list_list = new_list.split('>>') # [0]:序号,[1]:文件名,[2]:版本,[3]:大小
new_file_infos.append([new_list_list[0], new_list_list[1], new_list_list[2], new_list_list[3]])
# ————“新文件列表”对比“旧文件列表”,查找添加文件———-
for new_file_info in new_file_infos:
search_add = False
for old_file_info in old_file_infos:
if new_file_info[1] == old_file_info[1]: # 新文件中的文件名,在旧文件中找到
if (new_file_info[2]!=old_file_info[2]) or (new_file_info[3] != old_file_info[3]):
file_versions.append([new_file_info[1], new_file_info[2], new_file_info[3]])
search_add = True #
break # 结束当前文件查找
if search_add == False: # 在旧文件名列表中未找到当前文件名,保存该文件名
file_adds.append(new_file_info[1])
# ————“新文件列表”对比“旧文件列表”,查找删除文件———-
for old_file_info in old_file_infos:
search_del = False
for new_file_info in new_file_infos:
if old_file_info[1] == new_file_info[1]: # 旧文件中的文件名,在新文件中找到
search_del = True #
break # 结束当前查找
if search_del == False: # 在新文件名列表中未找到当前文件名,保存该文件名
file_dels.append(old_file_info[1])
# ————“新文件列表”对比“旧文件列表”,输出比较结果———-
print("Delete files from old project:", len(file_dels), end='\n')
for file_del in file_dels:
print(file_del)
print('\n')
print("Add files to new project:", len(file_adds), end='\n')
for file_add in file_adds:
print(file_add)
print('\n')
print("Change files in the new version:", end='\n')
i = 0
for file_version in file_versions:
i += 1
print(str(i) + '>>' + file_version[0] + '>>' + file_version[1] + '>>' + file_version[2])
#===================================================================================
def start():
print(“Start execution…”)
def end():
print(“End of execution!”)
#===================================================================================
if name == ‘main’:
# ————–开始执行————————————————————————
start()
print(’’, end=’\n’) # 输出空行
# ————–执行————————————————————————
compare_file_name_instance = compare_file_name() # 实例化比较类
compare_file_name_instance.old_file_list() # 读取,处理旧文件列表
print(’’, end=’\n’) # 输出空行
compare_file_name_instance.new_file_list() # 读取,处理新文件列表
print(’’, end=’\n’) # 输出空行
compare_file_name_instance.compare()
print(’’, end=’\n’) # 输出空行
# ————--执行结束————————————————————————
end()
input("Click 'Enter' to finish the program !")
print("Finish !")