
Tạo báo cáo thống kê đối tượng theo loại và theo layer, ghi ra CSV
#Python#CSV#Báo cáo1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Kiểm kê nhanh một file: bao nhiêu điểm, đường, cung, body, trên layer nào. Báo cáo này hữu ích khi nhận file từ bên ngoài hay dọn dữ liệu.
Tạo báo cáo thống kê đối tượng theo loại…Các bước thực hiện
- Duyệt các collection. Points, Lines, Arcs, Splines, Bodies, Sketches.
- Đọc layer. obj.Layer cho mỗi đối tượng.
- Gom nhóm. Dict (loại, layer) -> số lượng.
- Ghi CSV. Cột loại, layer, số lượng.
- In tổng. Tổng đối tượng và số layer đang dùng.
Code tham khảo (Python)
import csv import os from collections import Counter import NXOpen def thu_thap(part): nhom = Counter() for ten, tap in (("Điểm", part.Points), ("Đường thẳng", part.Lines), ("Cung tròn", part.Arcs), ("Spline", part.Splines), ("Body", part.Bodies), ("Sketch", part.Sketches)): for o in tap: layer = getattr(o, "Layer", 0) nhom[(ten, layer)] += 1 return nhom def ghi_csv(nhom, duong_dan): os.makedirs(os.path.dirname(duong_dan), exist_ok=True) with open(duong_dan, "w", newline="", encoding="utf-8-sig") as f: w = csv.writer(f) w.writerow(["loai", "layer", "so_luong"]) for (ten, layer), n in sorted(nhom.items()): w.writerow([ten, layer, n]) def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return nhom = thu_thap(part) duong_dan = "D:/NXLab_xuat/thong_ke_%s.csv" % part.Leaf ghi_csv(nhom, duong_dan) tong = sum(nhom.values()) layers = sorted({l for (_, l) in nhom}) lw.WriteLine("Tổng %d đối tượng trên %d layer: %s" % (tong, len(layers), layers)) lw.WriteLine("Đã ghi: " + duong_dan) if __name__ == "__main__": main()Giải thích code
getattr(o, "Layer", 0)an toàn khi đối tượng không có thuộc tínhLayer(ví dụ Sketch).Countervới khóa tuple (loại, layer) cho thống kê hai chiều.- Ghi CSV với
utf-8-sigđể Excel hiển thị đúng chữ Việt.
Lỗi thường gặp
- Tên file có ký tự đặc biệt (dấu cách, ngoặc) trong
part.Leafcó thể gây lỗi khi ghi; chuẩn hóa tên trước khi dùng. - Sketch có thể không có Layer; dòng báo cáo sẽ hiện layer 0.
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.