使用Python的os
和shutil
模块来遍历目录,检查文件,复制图片,并删除空文件夹。下面是一个基本的脚本,该脚本将执行你描述的操作:
import os
import shutil
from collections import defaultdict
def copy_images_and_remove_empty_dirs(src_dir, dst_dir, image_extensions):
# 确保目标目录存在
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
# 映射原始文件名到带序号的文件名
name_to_counter = defaultdict(int)
# 遍历源目录
for root, dirs, files in os.walk(src_dir, topdown=False):
# 遍历文件
for file in files:
# 检查文件扩展名是否为图片
if file.lower().endswith(image_extensions):
# 构建源图片路径
src_file = os.path.join(root, file)
# 为避免重名,添加序号
base, ext = os.path.splitext(file)
counter = name_to_counter[base]
name_to_counter[base] += 1
if counter > 0:
new_file = f"{base}_{counter}{ext}"
else:
new_file = file
# 构建目标图片路径
dst_file = os.path.join(dst_dir, new_file)
# 复制图片
shutil.copy2(src_file, dst_file)
# 遍历子目录,并删除空目录(在遍历文件之后,因为我们要先处理文件)
for dir in dirs:
dir_path = os.path.join(root, dir)
# 检查目录是否为空
if not os.listdir(dir_path):
# 移除空目录
shutil.rmtree(dir_path)
# 示例用法
source_directory = '/path/to/source/directory'
destination_directory = '/path/to/destination/directory'
image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp') # 你可以根据需要添加更多扩展名
copy_images_and_remove_empty_dirs(source_directory, destination_directory, image_extensions)
请注意:
os.walk(src_dir, topdown=False)
使用topdown=False
是为了确保在处理文件之前先遍历到最底层的目录,这样在删除空目录时不会因为子目录的删除而影响到父目录的遍历。shutil.copy2()
用来复制文件,它还会尝试复制文件的元数据(如时间戳)。defaultdict(int)
用来存储每个图片基本名称(不含扩展名)的计数器,以确保重名时添加序号。shutil.rmtree()
用来删除空目录。- 脚本中的
image_extensions
是一个元组,包含了你想要处理的图片文件的扩展名。你可以根据需要添加或删除扩展名。
运行此脚本前,请确保将 source_directory
和 destination_directory
替换为实际的源目录和目标目录路径。