/ / Por que esse código não faz o back-up / diretórios ZIP? - python, zipfile

Por que este código não faz backup / diretórios ZIP? - python, zipfile

Eu estou fazendo um programa para arquivos ZIP. Neste cenário, estou tentando ZIP um diretório, com um subdiretório dentro dele. Eu estou usando a seguinte função, se o programa tem de ZIP um diretório, mas não subdiretórios ZIP, ele apenas leva os arquivos do subdiretório e coloca-los com todos os outros.

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

Obrigado.

Respostas:

4 para resposta № 1

O segundo argumento para ZipFile.write é o nome do arquivo, ou seja, o nome do arquivo do arquivo dentro do arquivo. Como o arquivo ZIP não contém informações de pasta por conta própria, aquele é onde isso tem que ir. Então, para colocar um arquivo dentro de um subdiretório, você precisa ajustar o arcname para incluir um nome de diretório.

Você pode usar os.path.relpath para calcular um caminho relativo ao seu path que parece ser a raiz do arquivo ZIP:

zipper.write(fileNom, os.path.relpath(fileNom, path))