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) |