67 lines
2.7 KiB
Python
67 lines
2.7 KiB
Python
|
|
import os
|
|||
|
|
import shutil
|
|||
|
|
from pathlib import Path
|
|||
|
|
|
|||
|
|
def copy_png_images(source_folder, destination_folder):
|
|||
|
|
"""
|
|||
|
|
从源文件夹递归搜索所有 .png 文件并复制到目标文件夹。
|
|||
|
|
|
|||
|
|
参数:
|
|||
|
|
source_folder (str): 源文件夹路径
|
|||
|
|
destination_folder (str): 目标文件夹路径
|
|||
|
|
"""
|
|||
|
|
# 将字符串路径转换为 Path 对象,更方便操作
|
|||
|
|
src_path = Path(source_folder)
|
|||
|
|
dest_path = Path(destination_folder)
|
|||
|
|
|
|||
|
|
# 检查源文件夹是否存在
|
|||
|
|
if not src_path.exists():
|
|||
|
|
print(f"错误:源文件夹 '{source_folder}' 不存在。")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
if not src_path.is_dir():
|
|||
|
|
print(f"错误:'{source_folder}' 不是一个有效的文件夹。")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
# 如果目标文件夹不存在,则创建它
|
|||
|
|
dest_path.mkdir(parents=True, exist_ok=True)
|
|||
|
|
|
|||
|
|
# 用于统计复制的文件数量
|
|||
|
|
copied_count = 0
|
|||
|
|
|
|||
|
|
# 使用 rglob 递归搜索所有 .png 文件(不区分大小写)
|
|||
|
|
# rglob('*.[pP][nN][gG]') 可以匹配 .png, .PNG, .Png 等
|
|||
|
|
png_files = src_path.rglob('*.[jJ][pP][gG]')
|
|||
|
|
|
|||
|
|
for png_file in png_files:
|
|||
|
|
try:
|
|||
|
|
# 计算目标文件的完整路径
|
|||
|
|
# 保持源文件夹的相对结构,但只保留文件名(可选:如果想保持结构,去掉 .name)
|
|||
|
|
# 这里我们只复制文件名到目标文件夹,避免路径过长或结构复杂
|
|||
|
|
dest_file = dest_path / png_file.name
|
|||
|
|
|
|||
|
|
# 处理重名文件:在文件名后添加序号
|
|||
|
|
counter = 1
|
|||
|
|
original_dest_file = dest_file
|
|||
|
|
while dest_file.exists():
|
|||
|
|
dest_file = original_dest_file.parent / f"{original_dest_file.stem}_{counter}{original_dest_file.suffix}"
|
|||
|
|
counter += 1
|
|||
|
|
|
|||
|
|
# 执行复制
|
|||
|
|
shutil.copy2(png_file, dest_file) # copy2 会保留文件的元数据(如修改时间)
|
|||
|
|
print(f"已复制: {png_file} -> {dest_file}")
|
|||
|
|
copied_count += 1
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"复制文件时出错: {png_file} - {e}")
|
|||
|
|
|
|||
|
|
print(f"\n复制完成!共复制了 {copied_count} 个 PNG 文件到 '{destination_folder}'。")
|
|||
|
|
|
|||
|
|
# ------------------ 主程序 ------------------
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
# ====== 请在这里修改源文件夹和目标文件夹的路径 ======
|
|||
|
|
source_folder = r"/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/3" # 替换为你的源文件夹路径
|
|||
|
|
destination_folder = r"/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/yolodataset/point" # 替换为你的目标文件夹路径
|
|||
|
|
# ====================================================
|
|||
|
|
|
|||
|
|
copy_png_images(source_folder, destination_folder)
|