Python: Como criar um arquivo zip a partir de múltiplos arquivos ou Diretório

Neste artigo vamos discutir como criar um arquivo zip a partir de arquivos selecionados ou arquivos de um diretório baseado em filtros.

O módulo de arquivos zip do Python fornece uma classe ZipFile para coisas relacionadas a arquivos zip. Vamos usar isto para criar um arquivo zip.

Primeiro importar a classe do módulo i.e.

from zipfile import ZipFile

Criar um arquivo zip a partir de múltiplos arquivos em Python

Passos são,

  • Criar um objeto ZipFile passando o novo nome do arquivo e modo como ‘w’ (modo de escrita). Ele irá criar um novo arquivo zip e abri-lo dentro do objeto ZipFile.
  • Call write() no objeto ZipFile para adicionar os arquivos nele.
  • call close() no objeto ZipFile para Fechar o arquivo zip.

Criará um arquivo zip ‘sample.zip’ com determinados arquivos dentro dele.
Nós podemos fazer a mesma coisa com “com aberto” . Ele fechará automaticamente o arquivo zip quando o objeto ZipFile sair do escopo, ou seja,

Criar um arquivo zip de um diretório

Para zipar todo o conteúdo de um diretório em um arquivo zip, precisamos iterar sobre todos os arquivos em um diretório e seus subdiretórios, depois adicionar cada entrada ao arquivo zip usando o ZipFile.write()

from zipfile import ZipFileimport osfrom os.path import basename# create a ZipFile objectwith ZipFile('sampleDir.zip', 'w') as zipObj: # Iterate over all the files in directory for folderName, subfolders, filenames in os.walk(dirName): for filename in filenames: #create complete filepath of file in directory filePath = os.path.join(folderName, filename) # Add file to zip zipObj.write(filePath, basename(filePath))

Irá zipar todo o conteúdo de um diretório em um único arquivo zip, ou seja, ‘sampleDir.zip’. Seu conteúdo será,

Zip selected files from a directory based on filter or wildcards

Para zipar arquivos selecionados de um diretório, precisamos verificar a condição de cada caminho de arquivo enquanto iterativo antes de adicioná-lo ao arquivo zip.

Criemos uma função que Itera por cima de um diretório e filtremos o conteúdo com um determinado callback. Os ficheiros que passarem o filtro só serão adicionados em zip, ou seja,

from zipfile import ZipFileimport osfrom os.path import basename# Zip the files from given directory that matches the filterdef zipFilesInDir(dirName, zipFileName, filter): # create a ZipFile object with ZipFile(zipFileName, 'w') as zipObj: # Iterate over all the files in directory for folderName, subfolders, filenames in os.walk(dirName): for filename in filenames: if filter(filename): # create complete filepath of file in directory filePath = os.path.join(folderName, filename) # Add file to zip zipObj.write(filePath, basename(filePath))

Só ficheiros zip csv de um directório, ou seja, passar uma função lambda como argumento nele.

zipFilesInDir('sampleDir', 'sampleDir2.zip', lambda name : 'csv' in name)

Criará um arquivo zip ‘sampleDir2.zip’ com todos os ficheiros csv de um directório dado.

Exemplo completo é o seguinte:

Deixe uma resposta

O seu endereço de email não será publicado.