Python比较两个文件中的内容

比较内容

  • 目标文件与源文件总行数对比
  • 目标文件与源文件每行数据值对比

代码实现

def compare_data(data1, data2):
    data1_total_line = 0  # 统计data1非空总行数
    data2_total_line = 0  # 统计data2非空总行数
    data1_list = []       # 存放data1数据
    data2_list = []       # 存放data2数据
    loss_line = 0         # 统计data1非空总行数与data2非空总行数之差
    loss_data = []        # 统计data1_list中存在,而data2_list中不存在的数据,即丢失数据
    diff_line = 0         # 统计data1和data2中id相同,值不同的行数
    diff_data_indata2 = []   # 存放data2_list中与data1_list中id相同,值不同的数据
    data1_dict = {}          # 将data1数据解析为,以id为key,其余为value,并存放与字典data1_dict
    data2_dict = {}          # 将data2数据解析为,以id为key,其余为value,并存放与字典data2_dict

    # 读取源文件数据并解析
    with open(data1, 'r', encoding='utf-8') as file1:
        line1 = file1.readlines()
        for line in line1:
            if line.strip():
                data1_total_line += 1
                data1_list.append(line.strip())
                id1 = line.split('|')[0]
                data1_dict[id1] = line.strip()

    # 读取目标文件数据并解析
    with open(data2, 'r', encoding='utf-8') as file2:
        line2 = file2.readlines()
        for line in line2:
            if line.strip():
                data2_total_line += 1
                data2_list.append(line.strip())
                id2 = line.split('|')[0]
                data2_dict[id2] = line.strip()

    # 统计data1非空总行数与data2非空总行数之差
    loss_line = abs(data2_total_line - data1_total_line)

    # 统计data1_list中存在,而data2_list中不存在的数据,即丢失数据
    for i in data1_list:
        if i not in data2_list:
            loss_data.append(i)

    # 存放data2_list中与data1_list中id相同,值不同的数据
    for k, v in data2_dict.items():
        if k not in data1_dict.keys() or data1_dict[k] != v:
            diff_line += 1
            diff_data_indata2.append(v)

    print("data1_total_line: " + str(data1_total_line))
    print("data2_total_line: " + str(data2_total_line))
    print("loss_line: " + str(loss_line))
    print("diff_line: " + str(diff_line))

    # 保存丢失数据
    with open("loss_data.txt", 'w', encoding='utf-8') as lossdata:
        for i in loss_data:
            if i == loss_data[-1]:
                lossdata.writelines(i)
            else:
                lossdata.writelines(i + '\n')
    # 保存差异数据
    with open("diff_data_indata2.txt", 'w', encoding='utf-8') as diffdata:
        for i in diff_data_indata2:
            if i == diff_data_indata2[-1]:
                diffdata.writelines(i)
            else:
                diffdata.writelines(i + '\n')


compare_data(r'D:\pythonProjects\section\requests\data_10.txt', r'D:\pythonProjects\section\requests\data_11.txt')

测试数据构造

def make_txt(total_line, num):
    with open(r'D:\pythonProjects\section\requests\data_' + str(num)+".txt", 'w', encoding='utf-8') as txtfile:
        for i in range(total_line):
            tmp = [str(j) for j in range(num)]
            line = '|'.join(tmp)
            if i == total_line - 1:
                txtfile.writelines(str(i)+'|'+line)
            else:
                txtfile.writelines(str(i)+'|'+line + '\n')


make_txt(100, 10)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值