2016-11-24 15 views
7

Używanie do tworzenia archiwum ZIP w Pythonie 3.5 nie działa zgodnie z oczekiwaniami w systemie Windows.Python's shutil.make_archive() tworzy katalog dot w systemie Windows

W systemie Linux działa poprawnie, wszystkie pliki i foldery znajdujące się wewnątrz directory są zarchiwizowane i widoczne w pliku zip. Jednak w systemie Windows tworzony jest dodatkowy folder - folder z kropkami .. Zobacz zrzut ekranu:

enter image description here

folderze sama jest pusta, ale chcę, aby pozbyć się go całkowicie (kolejny proces jest bardzo ścisły o strukturze). Obejście problemu nie będzie wymagało użycia make_archive() i ręcznego utworzenia ZipFile, ale uważam, że funkcja powinna działać w pierwszej kolejności.

Czy to błąd, czy też coś mi brakuje?


Edit: kropka plik jest obecny w 7zip oraz Total Commandera. Jest to najkrótsza fragment pracy dla mnie (Python 3.5.1, Windows 10):

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

ta tworzy nowy ZIP z treścią C:\Users\melka\Downloads\zip_test, który kończy się: enter image description here

jednak ręcznie tworzenia zip za pomocą tego kodu nie tworzy plik dOT:

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

nie można odtworzyć (używając Pythona 2.7). Twoja linia poleceń nie jest poprawna btw. Jesteś pewien, że to nie problem twojego graficznego programu Unarchiver? Używam 7-zip i nie widzę żadnej kropki reż. –

+0

To nie było poprawne, tylko z powodu ponownego wpisania go tutaj. Dostarczyłem próbki kodu, które nie działają dla mnie. Jestem prawie pewien, próbowałem otwarcia przy użyciu zarówno Total Commander, jak i 7Zip, a plik dot był pokazywany w obu (gdy został utworzony przez 'make_archive') - gdy został utworzony za pomocą funkcji niestandardowej, nie był obecny ani w unarchiver. –

+0

Spróbuj przekazać rejestrator do argumentu 'logger' dla' shutil.make_archive'? Może dostarczyć więcej informacji. – joeb

Odpowiedz

Powiązane problemy