备份一些py文件

This commit is contained in:
zqc
2025-12-20 18:07:49 +08:00
parent de5ac3ef22
commit 713ad3f3e4
17 changed files with 21 additions and 20 deletions

259
backup/sorting_dce.py Normal file
View File

@@ -0,0 +1,259 @@
import os
import shutil
import re
import sys
def find_target_folders(root_path, output_path):
"""
递归遍历根目录,找到包含特定关键词子文件夹的父文件夹,并进行相应的复制和重命名操作
"""
# 确保输出目录存在
os.makedirs(os.path.join(output_path, "DCE0"), exist_ok=True)
os.makedirs(os.path.join(output_path, "DCE1"), exist_ok=True)
# 使用递归函数遍历
for item in os.listdir(root_path):
item_path = os.path.join(root_path, item)
if os.path.isdir(item_path):
process_directory(item_path, output_path)
def process_directory(current_path, output_path):
"""
递归处理目录
"""
# 获取当前文件夹的名称
current_folder_name = os.path.basename(current_path)
# 检查当前目录下是否包含目标文件夹
contains_disco = False
contains_twist = False
for sub_item in os.listdir(current_path):
sub_item_path = os.path.join(current_path, sub_item)
if os.path.isdir(sub_item_path):
# 检查是否包含DISCO目标文件夹
if "DISCO Dyn Mph 4 Nav" in sub_item:
contains_disco = True
# 检查是否包含twist目标文件夹
if "twist_dixon_tra_dyn_p4" in sub_item:
contains_twist = True
# 如果包含DISCO目标文件夹
if contains_disco:
print(f"找到包含DISCO文件夹的父文件夹: {current_folder_name} (路径: {current_path})")
process_disco_parent_folder(current_path, current_folder_name, output_path)
# 找到后不需要继续递归,因为这个父文件夹就是我们需要的
return
# 如果包含twist目标文件夹
if contains_twist:
print(f"找到包含twist文件夹的父文件夹: {current_folder_name} (路径: {current_path})")
process_twist_parent_folder(current_path, current_folder_name, output_path)
# 找到后不需要继续递归,因为这个父文件夹就是我们需要的
return
# 如果不包含目标文件夹,继续递归遍历子目录
for sub_item in os.listdir(current_path):
sub_item_path = os.path.join(current_path, sub_item)
if os.path.isdir(sub_item_path):
process_directory(sub_item_path, output_path)
def process_disco_parent_folder(folder_path, folder_name, output_path):
"""
处理包含DISCO目标文件夹的父文件夹
"""
# 遍历父文件夹内的所有子文件夹
for sub_item in os.listdir(folder_path):
sub_item_path = os.path.join(folder_path, sub_item)
if not os.path.isdir(sub_item_path):
continue
# 查找包含 "DISCO Dyn Mph 4 Nav_0" 的文件夹
if "DISCO Dyn Mph 4 Nav_0" in sub_item:
target_path = os.path.join(output_path, "DCE0", f"DCE0_{folder_name}")
# 如果目标路径已存在,先删除
if os.path.exists(target_path):
shutil.rmtree(target_path)
# 复制文件夹
try:
shutil.copytree(sub_item_path, target_path)
print(f" 复制到 DCE0: {sub_item} -> DCE0_{folder_name}")
except Exception as e:
print(f" 复制失败: {e}")
# 查找包含 "DISCO Dyn Mph 4 Nav_7" 的文件夹
elif "DISCO Dyn Mph 4 Nav_7" in sub_item:
target_path = os.path.join(output_path, "DCE1", f"DCE1_{folder_name}")
# 如果目标路径已存在,先删除
if os.path.exists(target_path):
shutil.rmtree(target_path)
# 复制文件夹
try:
shutil.copytree(sub_item_path, target_path)
print(f" 复制到 DCE1: {sub_item} -> DCE1_{folder_name}")
except Exception as e:
print(f" 复制失败: {e}")
def process_twist_parent_folder(folder_path, folder_name, output_path):
"""
处理包含twist目标文件夹的父文件夹
"""
# 收集所有符合条件的文件夹
candidate_folders = []
# # 首先找到包含"twist_dixon_tra_dyn_p4"的文件夹
# twist_folder_path = None
# for sub_item in os.listdir(folder_path):
# sub_item_path = os.path.join(folder_path, sub_item)
#
# if not os.path.isdir(sub_item_path):
# continue
#
# # 找到包含"twist_dixon_tra_dyn_p4"的文件夹
# if "twist_dixon_tra_dyn_p4" in sub_item:
# twist_folder_path = sub_item_path
# break
#
# if not twist_folder_path:
# print(f" 错误: 未找到包含twist_dixon_tra_dyn_p4的文件夹")
# return
# 遍历twist文件夹内的子文件夹
for sub_item in os.listdir(folder_path):
sub_item_path = os.path.join(folder_path, sub_item)
if not os.path.isdir(sub_item_path):
continue
# 检查是否包含目标关键词且以"_W"结尾
if "vibe-twist_dixon_tra_dyn_p4_TTC" in sub_item and sub_item.endswith("_W"):
# 提取TTC值
match = re.search(r'TTC=([\d\.]+)s_', sub_item)
if match:
ttc_value = float(match.group(1))
candidate_folders.append((sub_item, sub_item_path, ttc_value))
print(f" 找到候选文件夹: {sub_item}, TTC={ttc_value}")
if not candidate_folders:
print(f" 未找到符合条件的文件夹")
return
# 按TTC值排序
candidate_folders.sort(key=lambda x: x[2])
# 找出TTC值最小的文件夹用于DCE0
dce0_candidate = candidate_folders[0]
target_path = os.path.join(output_path, "DCE0", f"DCE0_{folder_name}")
# 如果目标路径已存在,先删除
if os.path.exists(target_path):
shutil.rmtree(target_path)
# 复制文件夹到DCE0
try:
shutil.copytree(dce0_candidate[1], target_path)
print(f" 复制到 DCE0: {dce0_candidate[0]} -> DCE0_{folder_name}")
except Exception as e:
print(f" 复制失败: {e}")
# 找出TTC值大于200且最小的文件夹用于DCE1
dce1_candidate = None
for item, item_path, ttc_value in candidate_folders:
if ttc_value > 200:
dce1_candidate = (item, item_path, ttc_value)
break
if dce1_candidate:
target_path = os.path.join(output_path, "DCE1", f"DCE1_{folder_name}")
# 如果目标路径已存在,先删除
if os.path.exists(target_path):
shutil.rmtree(target_path)
# 复制文件夹到DCE1
try:
shutil.copytree(dce1_candidate[1], target_path)
print(f" 复制到 DCE1: {dce1_candidate[0]} -> DCE1_{folder_name}")
except Exception as e:
print(f" 复制失败: {e}")
else:
print(f" 未找到TTC>200的文件夹")
def main():
"""
主函数
"""
# 获取用户输入
print("文件夹处理工具")
print("=" * 50)
# # 输入根目录路径
# while True:
# root_path = input("请输入要遍历的根目录路径: ").strip()
# if os.path.isdir(root_path):
# break
# else:
# print(f"错误: 路径 '{root_path}' 不存在或不是目录")
#
# # 输入输出路径
# while True:
# output_path = input("请输入输出目录路径: ").strip()
# # 尝试创建输出目录
# try:
# os.makedirs(output_path, exist_ok=True)
# break
# except Exception as e:
# print(f"错误: 无法创建输出目录 '{output_path}': {e}")
root_path = "E:\\2pi增强已分期"
output_path = "F:\\pi2_convert"
# 执行处理
print("\n开始处理...")
print("-" * 50)
try:
find_target_folders(root_path, output_path)
print("\n处理完成!")
# 显示结果
dce0_path = os.path.join(output_path, "DCE0")
dce1_path = os.path.join(output_path, "DCE1")
if os.path.exists(dce0_path):
dce0_items = os.listdir(dce0_path)
print(f"\nDCE0文件夹中有 {len(dce0_items)} 个文件夹:")
for item in dce0_items:
print(f" {item}")
if os.path.exists(dce1_path):
dce1_items = os.listdir(dce1_path)
print(f"\nDCE1文件夹中有 {len(dce1_items)} 个文件夹:")
for item in dce1_items:
print(f" {item}")
except Exception as e:
print(f"处理过程中出现错误: {e}")
import traceback
traceback.print_exc()
return 1
return 0
if __name__ == "__main__":
sys.exit(main())