功能
可以对base_dir下的所有文件进行扫描,并将没有重名的文件转移。
可用于电影,字幕匹配,检查文件对完整性等。
例如:若文件夹内分别有:
- base_dir
- dir1
- img1.jpg
- img2.jpg
- img1.json
- dir2
- img3.jpg
- img4.jpg
- img5.jpg
- img3.json
- img6.jpg
- img7.jpg
- img4.json
- dir1
则在运行后会将img1,img3,img4对应的图片移动到目标文件夹。
其中目标后缀名(例中的.jpg和.json)可以自定义。
实现
import os # 用来读取文件
import shutil # 用来移动文件
base_dir = r'F:\pytest\testDir' # 照片根目录,会自动递归扫描
aim_dir = r'F:\pytest\testDir\out' # 目标文件夹,若没有此文件夹会自动创建
suffix = '.png' # 目标文件后缀名
suffix1 = '.json' # 重合文件后缀名
if not os.path.exists(aim_dir): # 新建文件夹
os.mkdir(aim_dir)
# 读取base_dir下的所有文件
ff = []
for path, direction, files in os.walk(base_dir):
for file in files:
if path != aim_dir:
ff.append(os.path.join(path, file))
# 将文件名与拓展名切分,保存文件名
fd = [f.split('\\')[-1] for f in ff]
# 想输出就把下面注释取消
# for i in ff:
# if i.endswith(suffix): # 如果后缀是jpg
# print(os.path.abspath(i))
for each in ff:
if each.endswith(suffix): # 如果是以suffix结尾
if not os.path.splitext(each)[0].split('\\')[-1] + suffix1 in fd: # 如果没有对应名称的suffix1
try:
shutil.move(each, aim_dir)
except shutil.Error: # 如果多个子文件夹内有相同名称的文件
print('有重名文件' + each)