Python-对比两个目录中Excel文件

  背景:我在5月20日收到了一批Excel文件数据,由于文件很多大约有将近5000个,已经通过编写python脚本处理完成。但是6月9日的时候,又收到了一批新的Excel数据。但是在处理过程中发现,本次提供的数据包含5月20日提供的数据。有的是新增了几个文件,但是文件后缀加了1、2、3这样的数字,有的直接在原先的文件中插入了新的记录,为了对比出来,我编写了一个脚本用来对比文件是否变化。

  判断逻辑:如果文件前缀一样,只是后面的数字不一样,就根据文件大小判断。如果大小一致,就认为是旧文件,反之是新增文件。如果根据目标目录中文件的前缀生成的文件,在原先目录中不存在就认为是新增文件。

  本人向来讲究直接干脆,废话不多说,直接上代码。水平有限,仅供参考。

#!/usr/bin/env python
# coding:utf-8 
"""
@File Name: file_compare.py
@Version: 1.0
@Python Version:  3.7
@Author: liguanbin
@Created Time: 2021/6/10 9:07
@Software: PyCharm
@Desc: 
"""

import os
import glob
import hashlib


# 获取省份目录
def file_compare():
    global source_path
    global target_path
    global province_name

    source_path = input("请输入原先目录:")
    target_path = input("请输入目标目录:")

    #target_path = "C:\\Users\\liguanbin\\Desktop\\新建文件夹\\20210609执委数据整理"
    #source_path = "C:\\Users\\liguanbin\\Desktop\\新建文件夹\\20210520执委数据整理"

    catalog_path_dir = [i for i in os.listdir(target_path) if os.path.isdir(os.path.join(target_path, i))]
    #print("该目录下有" + str(len(catalog_path_dir)) + "个目录")
    for province_name in catalog_path_dir:
        province_path = os.path.join(target_path, province_name)
        #print(province_name)
        #print(province_path)
        province_path_dir = [i for i in os.listdir(province_path) if os.path.isdir(os.path.join(province_path, i))]
        print("\"" + province_path + "\" 目录下有" + str(len(province_path_dir)) + "个目录")
        for city_name in province_path_dir:
            city_path = os.path.join(province_path, city_name)
            #print(city_path)

            all_excel = glob.glob(city_path + "\*.xlsx")
            if (all_excel == 0):
                print("\"" + city_path + "\" 目录下无.xlsx文件!")
            else:
                print("\"" + city_path + "\" 目录下有" + str(len(all_excel)) + "个文件")
                for excel_path in all_excel:

                    # 目标目录中的文件名
                    #print(excel_path)

                    #os.path.dirname(excel_path)                    
                    excel_file_name = os.path.basename(excel_path)  
                    #print(excel_file_name)

                    quxian = excel_file_name.split('-')[0]
                    source_excel_path = source_path + "\\" + province_name + "\\" + city_name + "\\" + quxian + ".xlsx"
                    # 源目录中的文件名
                    #print(source_excel_path)

                    if os.path.isfile(source_excel_path):
                        if get_file_size(excel_path) == get_file_size(source_excel_path) :
                            print(excel_path + "为旧文件!")

                        else:
                            print(excel_path + "为新增的文件!")
                    else:
                        print(excel_path + "为新增的文件!*****")

        print('*' * 80)


def get_file_size(filepath):
    return round(os.path.getsize(filepath)/float(1024),2)


if __name__ == '__main__':

    file_compare()

 

实际运行效果:(由于输出很多,这里只展示部分)

posted @ 2021-06-30 10:10  业余砖家  阅读(260)  评论(0编辑  收藏  举报