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 № 1O 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))