1 ################################################################# 2 #### 程序名称:给照片文件夹里照片按日期排序后引用表格的照片名称批量重命名 ### 3 ################################################################# 4 ''' 5 需求:照片文件夹下照片名字不规范,需要先按时间递增排序,后根据excel的第一列名称重命名照片, 6 格式人FKQXK001、FKQXK002、FKQXK003;同时将照片命名前的名称和修改日期保存到excel。 7 我的思路: 8 1.获取照片文件夹照片,存到照片列表pictures中 9 2.按照片的修改时间排序后存储到pics列表中 10 3.获取excel中照片名称,添加前路径和后面的后缀名,并存储到nms列表中。 11 4.for循环用os.rename(old, new)进行重命名 12 13 ''' 14 import os, sys,time,datetime 15 file_path = '.\pic' #定义照片所在的文件夹路径 16 17 #1.获取照片文件夹照片,存到照片列表pictures中 18 ########################################## 19 pictures = [fn for fn in os.listdir(file_path) if fn.endswith('.jpg') or fn.endswith('.JPG')] 20 #获取path路径下文件夹中所有图片文件,endswith是字符串的方法,listdir()是列出文件夹下所有文件, 21 print('pictures排序前文件:',pictures) #打印文件名称查看是否成功 22 23 #2.按照片的修改时间排序后存储到pics列表中 24 ########################################## 25 #python按修改时间顺序排列文件 26 def sort_file_by_time(file_path):#定义按时间排序的函数 27 files = os.listdir(file_path) 28 if not files: 29 return 30 else: 31 files = sorted(files, key=lambda x: os.path.getmtime(os.path.join(file_path, x)))#格式解释:对files进行排序.x是files的元素,:后面的是排序的依据. x只是文件名,所以要带上join. 32 return files 33 pics = sort_file_by_time(file_path) #按修改时间排序后的文件名称列表 34 print("pics按时间排序后的文件列表:",pics) #打印是否成功排序 35 #out:['first.jpg', 'FKQXK_01-1.jpg', 'FKQX01-2.jpg', 'FKQXK-γ-03_05-0.jpg', 'FKQX1.jpg', '123.jpg', 'γ-02_25-1.JPG', '14.JPG', 'last.JPG'] 36 37 #3.获取excel中照片名称,添加前路径和后面的后缀名,并存储到nms列表中。 38 ############################################ 39 #xling可读写表格 40 #获取excel的文件名 41 import xlwings as xw 42 import xlrd 43 wb = xw.Book('./data/names.xlsx') #这样的话就不会频繁打开新的Excel 44 sht = wb.sheets[0] #sht = wb.sheets[第一个sheet名] 45 rng=sht.range('a1').expand('table') 46 nrows=rng.rows.count #获取总函数,用于判断照片个数是否匹配 47 print("总行数:",nrows) 48 49 names=sht.range('a{}:a{}'.format(2,nrows)).value 50 print('names:',names) 51 print('len(names):',len(names)) 52 nms=[] 53 for name in names: 54 x=os.path.join(file_path,name+'.jpg') 55 nms.append(x) # './pic\FKQXK007\.jpg', './pic\FKQXK008\.jpg', './pic\FKQXK009\.jpg', 56 print(nms) 57 58 #4.for循环用os.rename(old, new)进行重命名 59 #################################### 60 #获取照片文件个数 61 picnum=len([lists for lists in os.listdir(file_path) if os.path.isfile(os.path.join(file_path, lists))]) #照片文件个数 62 63 for i in range(picnum): 64 old =os.path.join(file_path, pics[i]) #照片文件原来名称路径 65 print('old:',old) 66 new = nms[i] #照片文件替换后的名称路径,nms是excel照片文件名变换后的路径列表 67 print('new:',new) 68 os.rename(old, new) # 批量重命名照片 69 70 #将原始照片名称和时间保存到excel 71 sht.range('b{}'.format(i + 2)).value = pics[i] # 保存照片原始名称 72 73 timeStamp = os.path.getmtime(os.path.join(file_path, pics[i])) 74 # # print(timeStamp) 75 timeArray = time.localtime(timeStamp) 76 # # print(timeArray) 77 otherStyleTime = time.strftime('%Y-%m-%d %H:%M:%S', timeArray) 78 # print(str(otherStyleTime)) 79 # sht.range('c{}'.format(i+2)).value = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.path.getmtime(os.path.join(file_path, pics[i])))) #保存照片修改时间 80 sht.range('c{}'.format(i+2)).value = otherStyleTime #保存照片修改时间 81 82 # 保存工作簿 83 wb.save('name_RESULT.xlsx') 84 # 退出工作簿(可省略) 85 wb.close() 86 print('succed') 87 ######## end ################# 88