
Duyệt toàn bộ thư mục .prt: mở, xử lý, đóng và ghi báo cáo CSV
#Python#Hàng loạt1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Đây là khung chuẩn của mọi tác vụ hàng loạt: quét thư mục, mở từng file, làm một việc, đóng lại và ghi kết quả. Khi đã có khung này, bạn chỉ thay phần 'làm một việc'.
Duyệt toàn bộ thư mục .prtCác bước thực hiện
- Quét thư mục. os.walk lấy mọi file .prt, bỏ qua thư mục sao lưu.
- Mở từng file. Dùng Parts.Open (không hiển thị) cho nhanh.
- Gọi hàm xử lý. Hàm nhận part và trả về dict kết quả.
- Đóng ngay. Close sau mỗi file để giữ bộ nhớ ổn định.
- Ghi CSV. Mỗi file một dòng, có cột trạng thái và lỗi.
Code tham khảo (Python)
import csv import os import NXOpen def xu_ly(part): """Việc cần làm cho mỗi part. Thay phần này theo nhu cầu.""" return { "so_feature": sum(1 for _ in part.Features), "so_body": sum(1 for _ in part.Bodies), } def quet_prt(thu_muc): 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 f in sorted(files): if f.lower().endswith(".prt"): yield os.path.join(goc, f).replace("\\", "/") def main(thu_muc="D:/Du_an/ban_ve", ra="D:/NXLab_xuat/bao_cao.csv"): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() os.makedirs(os.path.dirname(ra), exist_ok=True) with open(ra, "w", newline="", encoding="utf-8-sig") as f: w = csv.writer(f) w.writerow(["file", "trang_thai", "so_feature", "so_body", "loi"]) for duong_dan in quet_prt(thu_muc): part = None try: part, st = session.Parts.Open(duong_dan) st.Dispose() kq = xu_ly(part) w.writerow([duong_dan, "OK", kq["so_feature"], kq["so_body"], ""]) except Exception as ex: w.writerow([duong_dan, "LOI", "", "", str(ex)]) finally: if part is not None: part.Close(NXOpen.BasePart.CloseWholeTree.TrueValue, NXOpen.BasePart.CloseModified.CloseModified, None) lw.WriteLine("Đã xử lý: " + duong_dan) if __name__ == "__main__": main()Giải thích code
utf-8-siggiúp Excel đọc đúng tiếng Việt khi mở file CSV.thu_muc_con[:] = ...sửa danh sách tại chỗ đểos.walkbỏ qua thư mục không mong muốn.- Truyền
Nonelàm bộ phản hồi khi đóng là cách ngắn gọn khi không cần xử lý hộp thoại.
Lỗi thường gặp
- Quên
Closelàm NX giữ hàng trăm part trong bộ nhớ và chậm dần rồi treo. - File assembly mở theo cây; cần quyết định có xử lý các component con hay không.
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.