Sử dụng shutil.make_archive('newarchive', 'zip', <directory>)
để tạo lưu trữ ZIP trong Python 3.5 không hoạt động như mong đợi trên Windows.Lệnh shutil.make_archive() của Python tạo thư mục dấu chấm trên Windows
Trên Linux nó hoạt động chính xác, tất cả các tệp và thư mục bên trong directory
được lưu trữ và hiển thị trong tệp zip. Tuy nhiên, trên Windows, một thư mục phụ được tạo - thư mục dấu chấm .
. Xem ảnh chụp màn hình:
Các thư mục chính nó là trống rỗng, nhưng tôi muốn thoát khỏi nó hoàn toàn (quá trình khác là rất nghiêm ngặt về cấu trúc). Giải pháp thay thế sẽ không sử dụng make_archive()
và tạo thủ công ZipFile
, nhưng tôi cảm thấy rằng chức năng sẽ hoạt động ngay từ đầu.
Đây có phải là lỗi hoặc tôi thiếu gì đó không?
Sửa: dot tập tin hiện diện trong 7Zip cũng như Total Commander. Đây là đoạn ngắn làm việc cho tôi (Python 3.5.1, Windows 10):
import shutil
import os
os.chdir('C:/Users/melka/Downloads')
shutil.make_archive('testing', 'zip', 'zip_test')
này tạo ra một bưu điện mới từ nội dung của C:\Users\melka\Downloads\zip_test
, mà kết thúc hạnh phúc:
Tuy nhiên, bằng tay tạo zip sử dụng mã này không tạo ra các chấm file:
import os
import zipfile
def make_zip(zip_name, path):
zip_handle = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
os.chdir(path)
for root, dirs, files in os.walk('.'):
for file in files:
zip_handle.write(os.path.join(root, file))
os.chdir('C:/Users/melka/Downloads')
make_zip('anotherzip.zip', 'zip_test')
không thể tái tạo (sử dụng trăn 2.7). Dòng lệnh của bạn không đúng btw. Bạn có chắc chắn nó không phải là một vấn đề của unarchiver đồ họa của bạn? Tôi đang sử dụng 7-zip và tôi không thấy bất kỳ dấu chấm nào. –
Nó không chính xác, chỉ vì gõ lại nó ở đây. Tôi đã cung cấp các mẫu mã không hoạt động cho tôi. Tôi khá chắc chắn, tôi đã thử mở bằng cách sử dụng cả Total Commander và 7Zip và tệp dấu chấm được hiển thị trong cả hai (khi được tạo thông qua 'make_archive') - khi được tạo thông qua chức năng tùy chỉnh, nó không có trong bộ bỏ lưu trữ. –
Hãy thử chuyển một trình ghi nhật ký tới đối số 'logger' cho' shutil.make_archive'? Có thể cung cấp thêm thông tin. – joeb