Python: Como descompactar um ficheiro | Extrair um único, múltiplo ou todos os ficheiros de um arquivo ZIP

Neste artigo iremos discutir diferentes formas de descompactar ou extrair um único, múltiplo ou todos os ficheiros de um arquivo zip para um directório actual ou diferente.

No módulo de arquivos zip do Python, a classe ZipFile fornece uma função de membro para extrair todo o conteúdo de um arquivo ZIP,

ZipFile.extractall(path=None, members=None, pwd=None)

Aceita os seguintes argumentos :

  • caminho : local onde o arquivo zip precisa ser extraído, se não for fornecido ele irá extrair o conteúdo do diretório atual.
  • membros : lista de arquivos a serem extraídos. Ele irá extrair todos os arquivos em zip se este argumento não for fornecido.
  • pwd : Se o arquivo zip for criptografado então passe a senha neste argumento padrão é None.

Módulo requerido :

from zipfile import ZipFile

Vamos usar isto para extrair todo o conteúdo dos arquivos zip.

Extrair todos os arquivos de um arquivo zip para o diretório atual.

Suponha que tenhamos um arquivo zip ‘sample.zip’. em nosso diretório atual, vamos ver como extrair todos os arquivos dele.
Para descompactar ele primeiro crie um objeto ZipFile abrindo o arquivo zip no modo de leitura e depois chame extraall() naquele objeto i.e.

# Create a ZipFile Object and load sample.zip in itwith ZipFile('sampleDir.zip', 'r') as zipObj: # Extract all the contents of zip file in current directory zipObj.extractall()

Ele extrairá todos os arquivos em zip no diretório atual. Se arquivos com o mesmo nome já estiverem presentes no local de extração então ele irá sobrescrever esses arquivos.

Extrair todos os arquivos de um arquivo zip para um diretório diferente

Para extrair todos os arquivos de um arquivo zip para um diretório diferente, podemos passar o local de destino como argumento em extractall(). O caminho pode ser relativo ou absoluto.

# Create a ZipFile Object and load sample.zip in itwith ZipFile('sampleDir.zip', 'r') as zipObj: # Extract all the contents of zip file in different directory zipObj.extractall('temp')

Extrai todos os ficheiros em ‘sample.zip’ na pasta temp.

Extrai poucos ficheiros de um ficheiro zip grande baseado na condição

Suponha que temos um ficheiro zip muito grande e precisamos de alguns ficheiros de milhares de ficheiros no arquivo. Descompactar todos os arquivos de um arquivo zip grande pode levar minutos. Mas se estamos interessados apenas em alguns dos arquivos arquivados, então em vez de descompactar o arquivo inteiro, podemos extrair um único arquivo também do arquivo zip.

No módulo zipfile do Python, a classe ZipFile fornece uma função de membro para extrair um único arquivo de um arquivo ZIP,

ZipFile.extract(member, path=None, pwd=None)

Aceita os seguintes argumentos :

  • membro : Nome completo do arquivo a ser extraído. Deve ser um da lista de nomes de arquivos arquivados retornada pelo ZipFile.namelist()
  • path : local onde o arquivo zip precisa ser extraído, se não for fornecido ele irá extrair o arquivo no diretório atual.
  • pwd : Se o arquivo zip for criptografado, então passe a senha neste argumento padrão é None.

Vamos usar isto para extrair somente arquivos csv de um arquivo zip, ou seja,

# Create a ZipFile Object and load sample.zip in itwith ZipFile('sampleDir.zip', 'r') as zipObj: # Get a list of all archived file names from the zip listOfFileNames = zipObj.namelist() # Iterate over the file names for fileName in listOfFileNames: # Check filename endswith csv if fileName.endswith('.csv'): # Extract a single file from zip zipObj.extract(fileName, 'temp_csv')

Extrairá somente arquivos csv de um determinado arquivo zip.

Exemplo completo é o seguinte,

from zipfile import ZipFiledef main(): print('Extract all files in ZIP to current directory') # Create a ZipFile Object and load sample.zip in it with ZipFile('sampleDir.zip', 'r') as zipObj: # Extract all the contents of zip file in current directory zipObj.extractall() print('Extract all files in ZIP to different directory') # Create a ZipFile Object and load sample.zip in it with ZipFile('sampleDir.zip', 'r') as zipObj: # Extract all the contents of zip file in different directory zipObj.extractall('temp') print('Extract single file from ZIP') # Create a ZipFile Object and load sample.zip in it with ZipFile('sampleDir.zip', 'r') as zipObj: # Get a list of all archived file names from the zip listOfFileNames = zipObj.namelist() # Iterate over the file names for fileName in listOfFileNames: # Check filename endswith csv if fileName.endswith('.csv'): # Extract a single file from zip zipObj.extract(fileName, 'temp_csv')if __name__ == '__main__': main()

Deixe uma resposta

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