2016-11-24 23 views
7

使用shutil.make_archive('newarchive', 'zip', <directory>)在Python 3.5中創建ZIP歸檔文件在Windows上的行爲不像預期的那樣。Python的shutil.make_archive()在Windows上創建點目錄

在Linux上它工作正常,directory內的所有文件和文件夾已存檔,並且在zip文件中可見。但是,在Windows上會創建一個額外的文件夾 - 點文件夾.。見截圖:

enter image description here

文件夾本身是空的,但我想獲得完全擺脫它(另一個過程是非常嚴格的結構)。解決方法是不使用make_archive()並手動創建ZipFile,但我覺得該功能應該首先工作。

這是一個錯誤還是我錯過了什麼?


編輯:點文件存在於7Zip的以及總指揮官。 這是我(的Python 3.5.1的Windows 10),最短的工作片段:

import shutil 
import os 
os.chdir('C:/Users/melka/Downloads') 
shutil.make_archive('testing', 'zip', 'zip_test') 

這個創建的C:\Users\melka\Downloads\zip_test內容的新ZIP,其最終被: enter image description here

然而,手動創建使用此代碼的zip不創建點文件:

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

無法重現(使用python 2.7)。你的命令行是不正確的順便說一句。你確定這不是你的圖形化解析器的問題嗎?我正在使用7-zip,並且沒有看到任何點目錄。 –

+0

這是不正確的,只是因爲在這裏重新輸入。我提供了不適合我的代碼示例。我很確定,我嘗試使用Total Commander和7Zip打開並且點文件在兩者中都顯示(當通過'make_archive'創建時) - 當通過自定義函數創建時,它不存在於任何一個unarchiver中。 –

+0

嘗試將記錄器傳遞給'shutil.make_archive'的'logger'參數?可以提供更多信息。 – joeb

回答