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

`
#################################################################

程序名称:给照片文件夹里照片按日期排序后引用表格的照片名称批量重命名

#################################################################
'''
需求:照片文件夹下照片名字不规范,需要先按时间递增排序,后根据excel的第一列名称重命名照片,
格式人FKQXK001、FKQXK002、FKQXK003;同时将照片命名前的名称和修改日期保存到excel。
我的思路:
1.获取照片文件夹照片,存到照片列表pictures中
2.按照片的修改时间排序后存储到pics列表中
3.获取excel中照片名称,添加前路径和后面的后缀名,并存储到nms列表中。
4.for循环用os.rename(old, new)进行重命名

'''
import os, sys,time,datetime
file_path = '.pic' #定义照片所在的文件夹路径

1.获取照片文件夹照片,存到照片列表pictures中

##########################################
pictures = [fn for fn in os.listdir(file_path) if fn.endswith('.jpg') or fn.endswith('.JPG')]

获取path路径下文件夹中所有图片文件,endswith是字符串的方法,listdir()是列出文件夹下所有文件,

print('pictures排序前文件:',pictures) #打印文件名称查看是否成功

2.按照片的修改时间排序后存储到pics列表中

##########################################

python按修改时间顺序排列文件

def sort_file_by_time(file_path):#定义按时间排序的函数
files = os.listdir(file_path)
if not files:
return
else:
files = sorted(files, key=lambda x: os.path.getmtime(os.path.join(file_path, x)))#格式解释:对files进行排序.x是files的元素,:后面的是排序的依据. x只是文件名,所以要带上join.
return files
pics = sort_file_by_time(file_path) #按修改时间排序后的文件名称列表
print("pics按时间排序后的文件列表:",pics) #打印是否成功排序

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']

3.获取excel中照片名称,添加前路径和后面的后缀名,并存储到nms列表中。

############################################

xling可读写表格

获取excel的文件名

import xlwings as xw
import xlrd
wb = xw.Book('./data/names.xlsx') #这样的话就不会频繁打开新的Excel
sht = wb.sheets[0] #sht = wb.sheets[第一个sheet名]
rng=sht.range('a1').expand('table')
nrows=rng.rows.count #获取总函数,用于判断照片个数是否匹配
print("总行数:",nrows)

names=sht.range('a{}:a{}'.format(2,nrows)).value
print('names:',names)
print('len(names):',len(names))
nms=[]
for name in names:
x=os.path.join(file_path,name+'.jpg')
nms.append(x) # './picFKQXK007.jpg', './picFKQXK008.jpg', './picFKQXK009.jpg',
print(nms)

4.for循环用os.rename(old, new)进行重命名

####################################

获取照片文件个数

picnum=len([lists for lists in os.listdir(file_path) if os.path.isfile(os.path.join(file_path, lists))]) #照片文件个数

for i in range(picnum):
old =os.path.join(file_path, pics[i]) #照片文件原来名称路径
print('old:',old)
new = nms[i] #照片文件替换后的名称路径,nms是excel照片文件名变换后的路径列表
print('new:',new)
os.rename(old, new) # 批量重命名照片

#将原始照片名称和时间保存到excel
sht.range('b{}'.format(i + 2)).value = pics[i]  # 保存照片原始名称

timeStamp = os.path.getmtime(os.path.join(file_path, pics[i]))
# # print(timeStamp)
timeArray = time.localtime(timeStamp)
# # print(timeArray)
otherStyleTime = time.strftime('%Y-%m-%d %H:%M:%S', timeArray)
# print(str(otherStyleTime))
# 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])))) #保存照片修改时间
sht.range('c{}'.format(i+2)).value = otherStyleTime #保存照片修改时间

保存工作簿

wb.save('name_RESULT.xlsx')

退出工作簿(可省略)

wb.close()
print('succed')
######## end #################

`

因为不懂,所以要学; 因为平凡,所以努力。 因为有为,所以有位。 因为执着,所以精彩。
原文地址:https://www.cnblogs.com/quezesheng/p/13463825.html