2012-10-08 37 views
12

Tôi đang sử dụng gói ZipFile để nén tệp bằng Python. Đây là mã của tôi:Làm cách nào để nén tệp bằng cấu trúc thư mục phẳng bằng Zipfile bằng Python?

archive = zipfile.ZipFile(join(settings.ARCHIVES_DIR, 'test.zip'), "a") 

for pdffile in glob.glob(join(settings.IBILLING_DIR, '*.pdf')): 
    archive.write(pdffile) 

archive.close() 

Vấn đề tôi đang gặp phải là tệp ZIP được tạo, chứa cấu trúc thư mục. Các tệp được thêm vào sẽ được thêm vào với đường dẫn đầy đủ có nghĩa là người dùng trích xuất bản lưu trữ, cũng sẽ nhận được cấu trúc thư mục. Tôi muốn thêm tệp vào ZIP nhưng không có cấu trúc thư mục nào.

Tôi làm cách nào để thực hiện việc này? Tôi không tìm thấy thông tin này trong tài liệu.

Cảm ơn

+0

thử sử dụng 'os.walk', thay vì glob? – wim

Trả lời

17

Đầu tiên thêm

import os 

sau đó sửa đổi dòng archive.write là:

archive.write(pdffile, os.path.basename(pdffile)) 

này quy định rằng mỗi pdf nên được viết vào tập tin zip với một con đường tương đương với chỉ phần tên tệp của đường dẫn bạn đang đọc (bằng cách chỉ định arcname parameter for the write() call).

Lưu ý, tuy nhiên, điều này có nghĩa là nếu bạn có hai tệp PDF có cùng tên trong các thư mục khác nhau, một tệp sẽ ghi đè lên tên khác.

Các vấn đề liên quan