
Đóng gói bộ hồ sơ giao hàng: nén thư mục STEP, PDF, BOM thành file ZIP có mục lục
#Python#Giao hàng#ZIP1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Gửi khách hàng một thư mục lộn xộn gây mất thiện cảm. Bài này gom STEP, PDF, BOM vào thư mục chuẩn, tạo mục lục, rồi nén thành một file ZIP có tên ghi ngày.
Đóng gói bộ hồ sơ giao hàngCác bước thực hiện
- Chuẩn bị thư mục. Thư mục tạm có ba nhóm STEP, PDF, BOM.
- Sao chép file. Từ nơi xuất sang thư mục đóng gói.
- Tạo mục lục. File README liệt kê nội dung và kích thước.
- Nén ZIP. zipfile với nén Deflate.
- Kiểm tra. Mở lại ZIP để đọc danh sách.
Code tham khảo (Python)
import os import shutil import time import zipfile import NXOpen NHOM = {"STEP": (".stp", ".step"), "PDF": (".pdf",), "BOM": (".csv", ".xlsx")} def gom_file(nguon, dich): da_chep = [] for ten in sorted(os.listdir(nguon)): duoi = os.path.splitext(ten)[1].lower() for nhom, ds in NHOM.items(): if duoi in ds: thu_muc = os.path.join(dich, nhom) os.makedirs(thu_muc, exist_ok=True) shutil.copy2(os.path.join(nguon, ten), os.path.join(thu_muc, ten)) da_chep.append((nhom, ten, os.path.getsize(os.path.join(nguon, ten)))) return da_chep def viet_muc_luc(dich, da_chep, ten_du_an): dong = ["HỒ SƠ GIAO HÀNG - " + ten_du_an, "Ngày: " + time.strftime("%Y-%m-%d"), ""] for nhom in NHOM: dong.append("[%s]" % nhom) for n, ten, kich in da_chep: if n == nhom: dong.append(" %-40s %8.1f KB" % (ten, kich / 1024.0)) dong.append("") with open(os.path.join(dich, "MUC_LUC.txt"), "w", encoding="utf-8") as f: f.write("\n".join(dong)) def nen_zip(thu_muc, duong_dan_zip): with zipfile.ZipFile(duong_dan_zip, "w", zipfile.ZIP_DEFLATED) as z: for goc, _, files in os.walk(thu_muc): for ten in files: day_du = os.path.join(goc, ten) z.write(day_du, os.path.relpath(day_du, thu_muc).replace("\\", "/")) with zipfile.ZipFile(duong_dan_zip) as z: return z.namelist() def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() nguon = "D:/NXLab_xuat" dich = "D:/NXLab_giao_hang/goi_" + time.strftime("%Y%m%d") os.makedirs(dich, exist_ok=True) da_chep = gom_file(nguon, dich) viet_muc_luc(dich, da_chep, "Du an Mau") duong_dan_zip = dich + ".zip" ds = nen_zip(dich, duong_dan_zip) lw.WriteLine("Đã đóng gói %d file vào %s" % (len(ds), duong_dan_zip)) if __name__ == "__main__": main()Giải thích code
shutil.copy2giữ nguyên ngày sửa file khi sao chép.zipfile.ZIP_DEFLATEDbật nén; mặc định là lưu không nén.- Mở lại ZIP vừa tạo để đọc danh sách là cách kiểm tra file không hỏng.
Lỗi thường gặp
- Thư mục nguồn lẫn file của dự án khác sẽ bị đóng gói nhầm; dùng thư mục xuất riêng cho từng dự án.
- File ZIP lớn gửi qua email dễ bị chặn; chia nhỏ hoặc dùng link chia sẻ.
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.