1. 程式人生 > 實用技巧 >案例應用:給照片資料夾裡照片按日期排序後引用表格的照片名稱批量重新命名(原始碼)

案例應用:給照片資料夾裡照片按日期排序後引用表格的照片名稱批量重新命名(原始碼)

 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