
Xuất STEP hàng loạt cho cả thư mục .prt: mở, xuất, đóng và ghi báo cáo thành công/lỗi
#Python#STEP#Hàng loạt1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Gửi toàn bộ bộ chi tiết cho đối tác nghĩa là xuất hàng trăm file STEP. Khung xử lý hàng loạt: quét thư mục, xuất từng file có bắt lỗi, ghi CSV kết quả.
Xuất STEP hàng loạt cho cả thư mục .prtCác bước thực hiện
- Quét thư mục. Lấy mọi .prt, bỏ thư mục sao lưu.
- Xuất từng file. Step214Creator với ExistingPart (không cần mở file).
- Bắt lỗi. Ghi lỗi nhưng tiếp tục.
- Đo thời gian. Mỗi file.
- Ghi báo cáo CSV. Trạng thái, kích thước, thời gian.
Code tham khảo (Python)
import csv import os import time import NXOpen def xuat_mot_file(session, prt, stp, cau_hinh): c = session.DexManager.CreateStep214Creator() try: c.ExportFrom = NXOpen.Step214Creator.ExportFromOption.ExistingPart c.InputFile = prt c.OutputFile = stp c.SettingsFile = cau_hinh c.FileSaveFlag = False c.Commit() finally: c.Destroy() def main(thu_muc_nguon="D:/Du_an/ban_ve", thu_muc_ra="D:/NXLab_xuat/step"): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() cau_hinh = os.path.join(session.GetEnvironmentVariableValue("UGII_BASE_DIR"), "step214ug", "ugstep214.def") os.makedirs(thu_muc_ra, exist_ok=True) nhat_ky = os.path.join(thu_muc_ra, "bao_cao_step.csv") ok = loi = 0 with open(nhat_ky, "w", newline="", encoding="utf-8-sig") as f: w = csv.writer(f) w.writerow(["file", "trang_thai", "kb", "giay", "loi"]) for goc, thu_muc_con, files in os.walk(thu_muc_nguon): thu_muc_con[:] = [d for d in thu_muc_con if d.lower() not in ("backup", "old")] for ten in sorted(files): if not ten.lower().endswith(".prt"): continue prt = os.path.join(goc, ten).replace("\\", "/") stp = os.path.join(thu_muc_ra, os.path.splitext(ten)[0] + ".stp").replace("\\", "/") t0 = time.perf_counter() try: xuat_mot_file(session, prt, stp, cau_hinh) kb = os.path.getsize(stp) // 1024 w.writerow([prt, "OK", kb, "%.1f" % (time.perf_counter() - t0), ""]) ok += 1 except Exception as ex: w.writerow([prt, "LOI", "", "%.1f" % (time.perf_counter() - t0), str(ex)]) loi += 1 lw.WriteLine("%s: %s" % ("OK " if os.path.isfile(stp) else "LỖI", ten)) lw.WriteLine("Xong: %d thành công, %d lỗi. Báo cáo: %s" % (ok, loi, nhat_ky)) if __name__ == "__main__": main()Giải thích code
- Dùng
ExistingPartnên không phải mở từng file vào phiên làm việc, tiết kiệm bộ nhớ. - Mỗi file có
try/exceptriêng nên một file lỗi không làm dừng cả lô. - Báo cáo CSV ghi cả thời gian từng file để phát hiện file nặng.
Lỗi thường gặp
- File
.prtthuộc assembly cần đủ component khi xuất; thiếu file cho STEP không đầy đủ. - Chạy hàng nghìn file nên chia thành nhiều lần chạy để dễ khôi phục khi gặp sự cố.
Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.
Điểm: 0
Trả lời
Đăng nhập để tham gia thảo luận.