代码
纯记录,以备日后查看。
# -*- coding: utf-8 -*-
"""
Python递归目录修改文件名
"""
import imghdr
import os
import re
#递归实现:遍历该目录以及所有子目录下的图片文件,为图片加缺陷前缀
def add_prefix(file_path:str, all_files:list):
#首先遍历当前目录所有文件及文件夹
file_list = os.listdir(file_path)
#准备循环判断每个元素是否是文件夹还是文件,是文件的话,把名称传入list,
#是文件夹的话,递归
for file_tmp in file_list:
#利用os.path.join()方法取得路径全名,并存入cur_path变量,
#否则每次只能遍历一层目录
cur_path = os.path.join(file_path, file_tmp)
#判断是否是文件夹
if os.path.isdir(cur_path):
add_prefix(cur_path, all_files)
else:
#判断文件类型,如果是图片类型,截取图片名字前半部分,
#并添加缺陷名(即父目录名字)到图片名字前缀
img_type_list = {'jpg','bmp','png','jpeg','rgb','tif'}
#print(type(img_type_list)) #set
if imghdr.what(cur_path) in img_type_list:
#删除之前已经添加的前缀,避免重复运行时前缀越加越多
file_tmp = re.split(r'&', file_tmp)[-1]
#获取图片后缀
pic_suffix = file_tmp.split(".")[-1]
#删除之前已经添加的后缀,避免重复运行时后缀越加越多
file_tmp = file_tmp.split(".")[0]
#获取父目录名字(即缺陷名字)
file_dir = os.path.split(file_path)[1]
pic_name_split = re.split(r'_', file_tmp)
name_tmp = ""
for i in range(len(pic_name_split)):
name_tmp += pic_name_split[i]
if re.match(r'Camera', pic_name_split[i]) is None:
name_tmp += '_'
else:
break
name_tmp += "." + pic_suffix
pic_new_name = file_path + "\/"[0] + file_dir + "&" + name_tmp
os.rename(cur_path, pic_new_name)
all_files.append(pic_new_name)
return
if __name__ == "__main__":
add_prefix(file_path="根目录", all_files=[])
print("Well done!")
代码中的测试文件夹及图片请点击:
根目录.7z