
Tổng hợp: bộ kiểm tra và chuẩn hóa metadata cho thư mục dự án (kiểm tra, sửa, báo cáo)
#Python#Tổng hợp#Attribute1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Bài tổng hợp nhóm thuộc tính: một script quét thư mục, kiểm tra theo lược đồ, tự sửa những lỗi an toàn (chuẩn hóa chữ hoa, bỏ khoảng trắng thừa, điền ngày), và xuất báo cáo cho những lỗi cần người xử lý.
Tổng hợp: bộ kiểm tra và chuẩn hóa…Các bước thực hiện
- Định nghĩa lược đồ. Thuộc tính bắt buộc, giá trị cho phép.
- Quét và mở từng part. Đọc thuộc tính.
- Tự sửa lỗi an toàn. Chuẩn hóa hoa/thường, cắt khoảng trắng.
- Ghi lại lỗi cần người xử lý. Thiếu hoặc sai danh sách.
- Xuất báo cáo và lưu. CSV và lưu part đã sửa.
Code tham khảo (Python)
import csv import os import NXOpen NGAY = NXOpen.Update.Option.Now KIEU = NXOpen.NXObject.AttributeType BAT_BUOC = ["MA_CHI_TIET", "VAT_LIEU", "NGUOI_THIET_KE"] VAT_LIEU_HOP_LE = {"S45C", "SS400", "SUS304", "AL6061", "DONG"} def doc(part, ten): return part.GetUserAttributeAsString(ten, KIEU.String, -1) if part.HasUserAttribute(ten, KIEU.String, -1) else None def chuan_hoa_va_kiem_tra(part): da_sua, can_nguoi = [], [] for ten in BAT_BUOC: gia_tri = doc(part, ten) if gia_tri is None or not gia_tri.strip(): can_nguoi.append("Thiếu " + ten) continue sach = gia_tri.strip() if ten in ("MA_CHI_TIET", "VAT_LIEU"): sach = sach.upper() if sach != gia_tri: part.SetUserAttribute(ten, -1, sach, NGAY) da_sua.append("%s: %r -> %r" % (ten, gia_tri, sach)) vl = (doc(part, "VAT_LIEU") or "").strip().upper() if vl and vl not in VAT_LIEU_HOP_LE: can_nguoi.append("Vật liệu ngoài danh sách: " + vl) return da_sua, can_nguoi def main(thu_muc="D:/Du_an/ban_ve", ra="D:/NXLab_xuat/bao_cao_metadata.csv"): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() os.makedirs(os.path.dirname(ra), exist_ok=True) tong = sach = 0 with open(ra, "w", newline="", encoding="utf-8-sig") as f: w = csv.writer(f) w.writerow(["file", "da_tu_sua", "can_nguoi_xu_ly"]) for goc, thu_muc_con, files in os.walk(thu_muc): 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 duong_dan = os.path.join(goc, ten).replace("\\", "/") part = None try: part, st = session.Parts.Open(duong_dan) st.Dispose() da_sua, can_nguoi = chuan_hoa_va_kiem_tra(part) if da_sua and not part.IsReadOnly: s = part.Save(NXOpen.BasePart.SaveComponents.FalseValue, NXOpen.BasePart.CloseAfterSave.FalseValue) s.Dispose() w.writerow([duong_dan, " ; ".join(da_sua), " ; ".join(can_nguoi)]) sach += 0 if (da_sua or can_nguoi) else 1 except Exception as ex: w.writerow([duong_dan, "", "LỖI: %s" % ex]) finally: if part is not None: part.Close(NXOpen.BasePart.CloseWholeTree.FalseValue, NXOpen.BasePart.CloseModified.CloseModified, None) tong += 1 lw.WriteLine("Đã kiểm %d file, %d file sạch. Báo cáo: %s" % (tong, sach, ra)) if __name__ == "__main__": main()Giải thích code
- Chỉ những lỗi an toàn (khoảng trắng, chữ hoa) được tự sửa; các lỗi cần hiểu ngữ cảnh chỉ báo cho người.
- Chỉ lưu khi thật sự có sửa và part không chỉ đọc, giảm rủi ro ghi nhầm.
- Báo cáo CSV có hai cột riêng để người dùng biết việc gì đã tự xử lý, việc gì còn chờ họ.
Lỗi thường gặp
- Chạy lần đầu trên bản sao dữ liệu; tự sửa hàng loạt nhầm rất khó phục hồi.
- Danh sách vật liệu hợp lệ nên lấy từ file cấu hình dùng chung để mọi script cùng một chuẩn.
Mở rộng
Nhóm bài tiếp theo (141–160) chuyển sang kiểm thử, gỡ lỗi và đóng gói chương trình NX Open.
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.