工作中遇到这样一种情况:提取的客户影像数据(jpg格式的图片),需要下发给相应网点,即在哪个网点办理的业务影像就把相应图片发给这个网点负责人。
即下图展示,当时是几个G的图片,分给90多家支行,手工是不可能手工分的,只能靠python自动分类了。
import os,tarfile,sys,zipefile
import shutil
from pathlib2 import Path
import pandas as pd
root = r'C:\Users\lmy\Desktop\202009142425' #需要分类的文件目录
path = Path(root) #
dir = os.listdir(root) #子文件列表
df = read_excel(r'C:\Users\lmy\Desktop\影像号对应分行.xls') #读取影像号对应分行的表格
branch_split = list(set(df['分行名称'])) #所有的分行名称列表
#获取该目录下所有jpg文件的路径列表(包括子文件夹里的jpg)
get_allfile_url(filepath):
allFile_url = []
for p in filepath.rglob('*.jpg'):
p = os.path.abspath(p)
allFile_url.append(p)
return allFile_url
allFile_url_old = get_allfile_url(path)
for split in branch_split: #遍历每个分行
path_fh = os.path.join(root,split) #需创建的分行文件夹路径
isExists = os.path.exists(path_fh) #判断是否已存在
if not isExists: #不存在,则新建
os.mkdir(path_fh)
print(path_fh+'文件夹创建成功')
else:
print(path_fh+'文件夹已存在')
split_ke = df[df['分行名称']==split].条形码.values #获取每个分行的条形码数据
for ke in dirs: #遍历需划分的每个条形码文件名
if ke in split_ke: #判断条形码是否属于当前分行
file = os.path.join(root,ke) #获取当前条形码文件路径
file_copy = os.path.join(path_fh,ke) #复制到新的文件夹的路径
shutil.copytree(file,file_copy) #复制
zip_name = split+'.tar.gz' #生成压缩文件的文件名称
zip_path = os.path.join(root,zip_name) #生成压缩文件的文件路径
with tarfile.open(zip_path,'w') as tar: #生成压缩文件
tar.add(path_fh,arcname=os.path.basename(path))
else:
continue
tar.close() #最后需要关闭
dirs2 = os.listdir(root) #现在根目录下子文件列表
allFile_url_new = get_allfile_url(path) #现在根目录下子jpg文件路径列表
num1 = len(dirs2)-len(dirs) #根目录下新增的文件夹数量
num2 = len(allFile_url_new)-len(allFile_url_old) #根目录下新增的jpg图片数量
print('创建的文件夹个数:%d'%num1)
print('复制的图片个数:%d'%num2)