案例应用:给照片文件夹里照片按日期排序后引用表格的照片名称批量重命名(源码)

 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   

 

posted @ 2020-08-10 17:31  bison2020  阅读(504)  评论(0编辑  收藏  举报