代码块
PlainText
"""
======================================================================
【程序功能简介】
本脚本实现了对 Creo 3D图纸(.prt)的批量自动化分类与宏命令(Mapkey)处理。
核心执行流程如下:
1. 环境校验:自动检查输入文件夹及外部 `mapkeys.pro` 宏文件是否存在,并读取宏代码。
2. 自动分类:遍历目标文件夹,识别所有 `.prt.*` 文件,按图纸名称自动创建独立文件夹。
3. 文件归档:将对应的 Creo 图纸原文件安全复制(保留属性)到各自新建的专属文件夹中。
4. 联动控制:通过 Creopyson 接口连接正在运行的 Creo 软件(需开启 Nitro-Program)。
5. 批量处理:依次切换 Creo 工作目录至各独立文件夹,打开图纸,注入并执行指定的宏命令。
6. 内存清理:每张图纸处理完成后,自动关闭当前窗口并擦除内存缓存,防止文件相互干扰。
======================================================================
"""
import os
import shutil
import glob
import creopyson
# ==========================================
# 1. 用户配置区域
# ==========================================
INPUT_DIR = r"D:\Desktop\test" # 请在次区域 **********修改你的 图纸文件夹目录
Macro_file_address = r"D:\Desktop\Python2025\CREO\pyhton_test\mapkeys.pro"
def main():
# 确保输入路径存在
if not os.path.exists(INPUT_DIR):
print(f"错误: 输入文件夹不存在 -> {INPUT_DIR}")
return
if not os.path.exists(Macro_file_address):
print(f"错误: 宏文件不存在 -> {Macro_file_address}")
return
# 彻底根治方案:用 Python 提前读取您的 mapkeys.pro 宏文件内容
try:
with open(Macro_file_address, 'r', encoding='utf-8', errors='ignore') as f:
macro_script = f.read()
print("成功读取宏文件内容!")
except Exception as e:
print(f"读取宏文件失败: {e}")
return
# ==========================================
# 2. 寻找文件夹内所有的 Creo .prt.* 文件
# ==========================================
search_pattern = os.path.join(INPUT_DIR, "*.prt.*")
all_creo_files = glob.glob(search_pattern)
if not all_creo_files:
print("未在文件夹中找到任何 .prt 文件。")
return
# 存储待处理的任务信息
tasks = []
for file_path in all_creo_files:
file_name = os.path.basename(file_path) # 例如: Fishhook.prt.1
# 提取核心 3D 图纸文件名 (取出纯字符串类型)
base_name_str = file_name.split(".prt")[0] # 例如: "Fishhook"
tasks.append((base_name_str, file_path, file_name))
print(f"共查询到 {len(tasks)} 个 Creo 图纸文件。开始创建文件夹并复制...")
# ==========================================
# 3. 创建独立文件夹并复制文件
# ==========================================
ready_tasks = []
for base_name_str, src_path, file_name in tasks:
# 新文件夹路径
target_dir = os.path.join(INPUT_DIR, base_name_str)
# 创建文件夹(如果已存在则跳过)
if not os.path.exists(target_dir):
os.makedirs(target_dir)
# 目标文件复制路径
dst_path = os.path.join(target_dir, file_name)
# 复制文件
try:
shutil.copy2(src_path, dst_path)
ready_tasks.append((base_name_str, target_dir, file_name))
except Exception as e:
print(f"复制文件 {file_name} 失败: {e}")
print("文件夹创建与文件复制完成。")
# ==========================================
# 4 & 5. 调用 creopyson 遍历操作 Creo
# ==========================================
print("正在连接到已打开的 Creo 软件...")
try:
# 连接 creopyson 服务
c = creopyson.Client()
c.connect()
except Exception as e:
print(f"连接 Creopyson 失败!请检查 Nitro-Program 开启状态。错误: {e}")
return
# 遍历处理每一个独立的文件夹
for base_name_str, target_dir, file_name in ready_tasks:
print(f"\n正在处理图纸: {base_name_str}")
try:
# 1. 更改 Creo 当前工作目录
c.creo_cd(target_dir)
print(f"-> 工作目录已设置为: {target_dir}")
# 2. 打开该文件夹下的 3D 图纸文件 (传递标准后缀名,例如 Fishhook.prt)
clean_creo_name = base_name_str + ".prt"
c.file_open(clean_creo_name, display=True)
print(f"-> 已成功打开文件: {clean_creo_name}")
# 3. 运行宏命令:改用官方标准的 interface_mapkey,直接推送刚刚读取出来的宏代码内容
c.interface_mapkey(script=macro_script)
print(f"-> 已通过接口成功触发并执行宏动作")
# 4. 关闭当前文件窗口,并从内存中彻底擦除,防止相互干扰
# 注意:creopyson 没有 file_close 方法,正确方法名是 file_close_window,
# 参数名是 file_(带下划线)。仅关闭窗口不会清内存,因此还需调用 file_erase。
c.file_close_window(file_=clean_creo_name)
c.file_erase(file_=clean_creo_name, erase_children=True)
print(f"-> 已关闭窗口并清理内存: {clean_creo_name}")
except Exception as e:
print(f"处理 {base_name_str} 时发生 Creo 操作错误: {e}")
print("\n所有文件夹遍历处理完毕!")
if __name__ == "__main__":
main()
复制成功
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删