zoukankan      html  css  js  c++  java
  • 案例应用:给照片文件夹里照片按日期排序后引用表格的照片名称批量重命名

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

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

    #################################################################
    '''
    需求:照片文件夹下照片名字不规范,需要先按时间递增排序,后根据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 #################

    `

    因为不懂,所以要学; 因为平凡,所以努力。 因为有为,所以有位。 因为执着,所以精彩。
  • 相关阅读:
    20162317袁逸灏 第四周实验报告:实验一 线性结构
    仿ArrayList功能的bag类
    算法复杂度课后作业
    20162317 2017-2018-1 《程序设计与数据结构》第3周学习总结
    学号 2017-2018-1 《程序设计与数据结构》第1周学习总结
    Android:有关下拉菜单导航的学习(供自己参考)
    Android:有关菜单的学习(供自己参考)
    Java:类集框架中集合的学习
    20162305李昱兴 2017-2018-1 《程序设计与数据结构》第1周学习总结
    第十六周 数据库课堂实践 20162305 李昱兴
  • 原文地址:https://www.cnblogs.com/quezesheng/p/13463825.html
Copyright © 2011-2022 走看看