案例應用:給照片文件夾里照片按日期排序后引用表格的照片名稱批量重命名


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

程序名稱:給照片文件夾里照片按日期排序后引用表格的照片名稱批量重命名

#################################################################
'''
需求:照片文件夾下照片名字不規范,需要先按時間遞增排序,后根據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) # './pic\FKQXK007\.jpg', './pic\FKQXK008\.jpg', './pic\FKQXK009\.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 #################

`


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM