2016-11-24 18 views
7

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:

enter image description here

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: enter image description here

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') 

enter image description here

+0

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. –

+0

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ữ. –

+0

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

Trả lời

1

này "lỗi" đã được cố định trong tháng 10 năm 2016: https://github.com/python/cpython/commit/666de7772708047b63125126b0147931571254a4

Ở đây diff: enter image description here

Rõ ràng, bạn cần cập nhật hoặc là Python 3.5.3 hoặc 3.6.

+0

Cập nhật tính đến ngày 1 tháng 1 năm 18: Vấn đề này cũng xuất hiện với Python 3.4.7 trên _Linux_. Nó không phải là trường hợp trước (<= 3.4.6, mặc dù tôi không chắc chắn nếu nó đã được giới thiệu với 3.4.6, 3.4.5, hoặc một phiên bản trước đó hơi). – Nick

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