背景:我在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()

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

Python-对比两个目录中Excel文件的更多相关文章

  1. shell对比两个目录中有哪些文件不同

    参考:https://www.cnblogs.com/liyuchuan/p/10756066.html 目录结构: /data/dir1 subdir/ subfile /data/dir2 sub ...

  2. 比较两个目录中的文件 diff -rq

    [root@bass test]# mkdir A B [root@bass test]# tree A A └── lin 0 directories, 1 file [root@bass test ...

  3. python glob 用通配符查找指定目录中的文件 - 开源中国社区

    python glob 用通配符查找指定目录中的文件 - 开源中国社区 python glob 用通配符查找指定目录中的文件

  4. find - 递归地在层次目录中处理文件

    总览 SYNOPSIS find [path...] [expression] 描述 DESCRIPTION 这个文档是GNU版本 find 命令的使用手册. find 搜索目录树上的每一个文件名,它 ...

  5. python将字典列表导出为Excel文件的方法

    将如下的字典列表内容导出为Excel表格文件形式: ​ 关于上图字典列表的写入,请参考文章:https://blog.csdn.net/weixin_39082390/article/details/ ...

  6. Linux find命令:在目录中查找文件(超详解)

    find 是 Linux 中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限.大小.时间.inode 号等来搜索文件.但是 find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,f ...

  7. Java对比两个数据库中的表和字段,写个冷门的东西

    Java对比两个数据库中的表和字段,写个冷门的东西 转载的 来源网络 目前所在的项目组距离下个版本上线已经很近了,就面临了一个问题:开发人员在开发库上根据需要增加数据表.数据字段.或者变更了字段类型或 ...

  8. Linux查看目录中的文件

    Linux查看目录中的文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls examples.desktop jdk 公共的 视频 文档 音乐 java ...

  9. File类之在指定目录中查找文件

    package IoDemo; import java.io.File; /** * @Title:FileDemo2 * @Description:在指定的目录中查找文件 * @author Cra ...

随机推荐

  1. FreeSWITCH的安装与使用

    FreeSWITCH

  2. [刷题] 416 Partition Equal Subset Sum

    要求 非空数组的所有数字都是正整数,是否可以将这个数组的元素分成两部分,使得每部分的数字和相等 最多200个数字,每个数字最大为100 示例 [1,5,11,5],返回 true [1,2,3,5], ...

  3. [bug] Junit initializationError

    原因 导包错误 解决 先删除 import org.junit.Test; 再导入正确的包 参考 https://blog.csdn.net/javae100/article/details/7978 ...

  4. Docker------阿里云部署私有镜像仓库

    Docker------阿里云部署私有镜像仓库   前言 公共镜像仓库 官方:https://hub.docker.com/ 基于各个软件开发或者软件提供方开发的 非官方:其它组织或公司开发的镜像,供 ...

  5. 诸神之眼-Nmap 教程 2

    |>>>简版先附上<<<| Nmap基础学习 语法 nmap + [空格] + <选项|多选项|协议> + [空格]+ <目标> 如 nma ...

  6. Rust trait

    Rust trait Rust中的trait类似于Java中的接口,定义了一组可以被类型选择实现的"契约"或共享行为,. 特征定义: trait Playable{ fn play ...

  7. qt利用QT designer构建第一个界面helloworld工程

    qt利用QT designer构建第一个界面helloworld工程原创ZJE_ANDY 发布于2017-04-07 20:25:28 阅读数 6613 收藏展开第一步:点击New Project 第 ...

  8. 将.netcore5.0(.net5)部署在Ubuntu的docker容器中

    环境:     宿主机:winows 10 家庭版     虚拟机管理软件:Hyper-V     虚拟机系统:Ubuntu 20.10     Docker版本:Docker CE 20.10.2 ...

  9. 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化

    目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...

  10. Kubernetes认证入门指南

    Kubernetes用来执行安全访问和权限的步骤有3个--认证(Authentication).授权(Authorization)和准入(Admission).在本文中,我们先开始了解认证(Authe ...