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()
实际运行效果:(由于输出很多,这里只展示部分)
Python-对比两个目录中Excel文件的更多相关文章
- shell对比两个目录中有哪些文件不同
参考:https://www.cnblogs.com/liyuchuan/p/10756066.html 目录结构: /data/dir1 subdir/ subfile /data/dir2 sub ...
- 比较两个目录中的文件 diff -rq
[root@bass test]# mkdir A B [root@bass test]# tree A A └── lin 0 directories, 1 file [root@bass test ...
- python glob 用通配符查找指定目录中的文件 - 开源中国社区
python glob 用通配符查找指定目录中的文件 - 开源中国社区 python glob 用通配符查找指定目录中的文件
- find - 递归地在层次目录中处理文件
总览 SYNOPSIS find [path...] [expression] 描述 DESCRIPTION 这个文档是GNU版本 find 命令的使用手册. find 搜索目录树上的每一个文件名,它 ...
- python将字典列表导出为Excel文件的方法
将如下的字典列表内容导出为Excel表格文件形式: 关于上图字典列表的写入,请参考文章:https://blog.csdn.net/weixin_39082390/article/details/ ...
- Linux find命令:在目录中查找文件(超详解)
find 是 Linux 中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限.大小.时间.inode 号等来搜索文件.但是 find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,f ...
- Java对比两个数据库中的表和字段,写个冷门的东西
Java对比两个数据库中的表和字段,写个冷门的东西 转载的 来源网络 目前所在的项目组距离下个版本上线已经很近了,就面临了一个问题:开发人员在开发库上根据需要增加数据表.数据字段.或者变更了字段类型或 ...
- Linux查看目录中的文件
Linux查看目录中的文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls examples.desktop jdk 公共的 视频 文档 音乐 java ...
- File类之在指定目录中查找文件
package IoDemo; import java.io.File; /** * @Title:FileDemo2 * @Description:在指定的目录中查找文件 * @author Cra ...
随机推荐
- FreeSWITCH的安装与使用
FreeSWITCH
- [刷题] 416 Partition Equal Subset Sum
要求 非空数组的所有数字都是正整数,是否可以将这个数组的元素分成两部分,使得每部分的数字和相等 最多200个数字,每个数字最大为100 示例 [1,5,11,5],返回 true [1,2,3,5], ...
- [bug] Junit initializationError
原因 导包错误 解决 先删除 import org.junit.Test; 再导入正确的包 参考 https://blog.csdn.net/javae100/article/details/7978 ...
- Docker------阿里云部署私有镜像仓库
Docker------阿里云部署私有镜像仓库 前言 公共镜像仓库 官方:https://hub.docker.com/ 基于各个软件开发或者软件提供方开发的 非官方:其它组织或公司开发的镜像,供 ...
- 诸神之眼-Nmap 教程 2
|>>>简版先附上<<<| Nmap基础学习 语法 nmap + [空格] + <选项|多选项|协议> + [空格]+ <目标> 如 nma ...
- Rust trait
Rust trait Rust中的trait类似于Java中的接口,定义了一组可以被类型选择实现的"契约"或共享行为,. 特征定义: trait Playable{ fn play ...
- qt利用QT designer构建第一个界面helloworld工程
qt利用QT designer构建第一个界面helloworld工程原创ZJE_ANDY 发布于2017-04-07 20:25:28 阅读数 6613 收藏展开第一步:点击New Project 第 ...
- 将.netcore5.0(.net5)部署在Ubuntu的docker容器中
环境: 宿主机:winows 10 家庭版 虚拟机管理软件:Hyper-V 虚拟机系统:Ubuntu 20.10 Docker版本:Docker CE 20.10.2 ...
- 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化
目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...
- Kubernetes认证入门指南
Kubernetes用来执行安全访问和权限的步骤有3个--认证(Authentication).授权(Authorization)和准入(Admission).在本文中,我们先开始了解认证(Authe ...