Python 比较同一工程两个版本的文件

这是一个使用Python编写的用于比较同一工程中两个版本文件的工具。它包括读取和处理旧文件列表、新文件列表,并进行比较的功能。
摘要由CSDN通过智能技术生成

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 !")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值