Tworzę program do plików ZIP. W tym scenariuszu próbuję ZIP katalogu z podkatalogiem wewnątrz niego. Używam następującej funkcji, jeśli program musi ZIP z katalogu, ale nie robi podkatalogów ZIP, po prostu pobiera pliki z podkatalogu i umieszcza je ze wszystkimi innymi.
zipper = zipfile.ZipFile(systemDate + ".zip", "w")
def zipdir(path, ziph):
logging.info("ZIP function has been called.")
for root, dirs, files in os.walk(path):
for file in files:
fileNom = os.path.join(root, file)
print("file nom: " + fileNom)
zipper.write(fileNom, basename(fileNom))
Dzięki.
Odpowiedzi:
4 dla odpowiedzi № 1Drugi argument do ZipFile.write
to nazwa archiwum, czyli nazwa pliku w archiwum. Ponieważ plik ZIP nie zawiera żadnych informacji o folderach, który to gdzie to musi iść. Aby umieścić plik w podkatalogu, musisz dostosować arcname
dołączyć nazwę katalogu.
Możesz użyć os.path.relpath
obliczyć ścieżkę względem twojego path
który wydaje się być głównym plikiem ZIP:
zipper.write(fileNom, os.path.relpath(fileNom, path))