背景:我在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()
實際執行效果:(由於輸出很多,這裡只展示部分)