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 #################

    `

    因为不懂,所以要学; 因为平凡,所以努力。 因为有为,所以有位。 因为执着,所以精彩。
  • 相关阅读:
    SQOOP的安装配置_Linux伊甸园开源社区24小时滚动更新开源资讯,全年无休!
    Cloudera's Hadoop Demo VM for CDH4 Cloudera Support
    海量文档查同或聚类问题 Locality Sensitive Hash 算法
    part 1: resemblance with the jaccard coefficient
    计算机科学中最重要的32个算法zz
    详细的tfidf构建过程实例(转)
    2012 Beijing Google Dev FastDay(11/03/2012) 移动新观察
    百度技术沙龙
    Hive官方手册翻译(Getting Started) 实践检验真理 51CTO技术博客
    《周末休闲吧》:教你如何玩车震——车震全程攻略!_周末休闲吧_百度空间
  • 原文地址:https://www.cnblogs.com/quezesheng/p/13463825.html
Copyright © 2011-2022 走看看