2010-08-31 20 views
13

Trong ứng dụng web python, tôi đang đóng gói một số nội dung trong một tệp zip. Tôi muốn làm điều này hoàn toàn trên bay, trong bộ nhớ, mà không cần chạm vào đĩa. Điều này đi tốt bằng cách sử dụng ZipFile.writestr miễn là tôi đang tạo một cấu trúc thư mục bằng phẳng, nhưng làm cách nào để tạo thư mục bên trong mã zip?Làm thế nào để tạo một tệp zip trong bộ nhớ với các thư mục mà không cần chạm vào đĩa?

Tôi đang sử dụng python2.4.

http://docs.python.org/library/zipfile.html

+4

Bạn đã thử đặt tên tệp của tệp để thêm vào 'directory/filename.ext' chưa? – theomega

+0

@theomega là chính xác. – mahmoud

Trả lời

25

Điều 'theomega' đã nói trong nhận xét về bài đăng gốc của tôi, thêm '/' vào tên tệp thực hiện thủ thuật. Cảm ơn!

from zipfile import ZipFile 
from StringIO import StringIO 

inMemoryOutputFile = StringIO() 

zipFile = ZipFile(inMemoryOutputFile, 'w') 
zipFile.writestr('OEBPS/content.xhtml', 'hello world') 
zipFile.close() 

inMemoryOutputFile.seek(0) 
+2

Lưu ý rằng nếu bạn đang sử dụng python 3 thì bạn sẽ muốn sử dụng ['BytesIO'] (https://docs.python.org/ 3/library/io.html). – Panda

+0

Và nếu bạn chỉ muốn có các thư mục không có tệp, hãy để một '/' ở cuối. –

1

Sử dụng một StringIO. Đó là apparently OK để sử dụng chúng cho zipfiles.

+0

Chúng tôi cũng làm điều này. Hoạt động rất độc đáo. –

+0

Câu trả lời này đã lỗi thời, câu trả lời có bị giảm giá không? – AnotherParker

+1

@AnotherParker Nếu bạn có một giải pháp hiện đại hơn, xin vui lòng đăng bài và tôi sẽ upvote – RPGillespie

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