quezesheng

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

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

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

`

分类:

技术点:

相关文章:

  • 2021-10-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-09
  • 2021-12-12
  • 2022-12-23
  • 2021-08-09
猜你喜欢
  • 2021-08-23
  • 2021-06-16
  • 2022-01-01
  • 2021-11-13
  • 2022-02-07
  • 2021-10-25
  • 2022-01-15
相关资源
相似解决方案