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


     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   
    因为不懂,所以要学; 因为平凡,所以努力。 因为有为,所以有位。 因为执着,所以精彩。
  • 相关阅读:
    构造函数
    时延(delay,latency)
    吞吐量
    带宽(band-width)
    单位
    bps
    比特(bit)
    速率
    C语言中的“>>”和“<<”
    C#中unit
  • 原文地址:https://www.cnblogs.com/quezesheng/p/13471028.html
Copyright © 2020-2023  润新知