Eu li a zipfiledocumentação , mas não conseguia entender como descompactar um arquivo, apenas como compactar um arquivo. Como descompacte todo o conteúdo de um arquivo zip no mesmo diretório?
e se o conteúdo do arquivo .zip for o mesmo, em todos os arquivos .zip? como renomear o conteúdo antes de extrair? exemplo: 1.zip 2.zip .. todos contêm content.txt: extraem todos como 1content.txt 2content.txt?
iratzhash
8
@iratzhash Normalmente, crio um novo diretório temporário para o conteúdo usando tempfile : docs.python.org/3/library/tempfile.html Descompacte o arquivo no diretório temporário e movo / organize os arquivos a partir daí.
Dave Forgac
8
@ 3kstc eu faria from zipfile import ZipFile. Ao usá-lo, você não precisa mais usar zipfile.ZipFilee pode usá-lo ZipFile(zip_file_name).
Debug255
@iratzhash Sei que você comentou 1,5 anos atrás. Mas para que outros saibam, geralmente o conteúdo de um arquivo zip é somente leitura. Uma boa resposta é aqui por "Bouke"
Debug255
Uma espécie de meta nota, mas a edição de novembro de 2018 torna isso praticamente idêntico a outra resposta que já usava o gerenciador de contexto (e vincula o que isso significa).
Engineero
304
Se você estiver usando o Python 3.2 ou posterior:
import zipfile
with zipfile.ZipFile("file.zip","r")as zip_ref:
zip_ref.extractall("targetdir")
Você não precisa usar o fechamento ou tentar / capturar com isso, pois ele usa a
construção do gerenciador de contexto .
Obrigado por sua atenção @MylesHollowed No entanto, esta não é uma cópia da resposta aceita. Eu concordo que eles são semelhantes um ao outro, mas são diferentes. Isso também é indicado pelo seu comentário, porque o aceito é definitivamente melhor para você do que o meu. Se fosse uma cópia, seria a mesma ... Para alguém, minha resposta pode ser valiosa porque talvez seja mais legível e como você notou importar menos código ... É por causa dessas diferenças que eu decidi colocar minha resposta para dar uma alternativa. Não é por isso que podemos colocar outras respostas depois de aceitar uma? Tudo de bom
simhumileco 30/10
O que há de errado com esta resposta? Por que alguém lhe deu um ponto negativo? Afinal, é a resposta para a pergunta e se distingue por sua simplicidade em comparação com outras respostas, o que pode ser importante para algumas pessoas que procuram uma resposta. Não é?
simhumileco 28/01
1
O @MylesHollowed import zipfile.ZipFilegera ModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a packagena 3.6.5. Estou aberto a ser um erro de operador da minha parte, mas não sei o que é.
MikeF 26/02
6
tente isto:
import zipfile
def un_zipFiles(path):
files=os.listdir(path)for file in files:if file.endswith('.zip'):
filePath=path+'/'+file
zip_file = zipfile.ZipFile(filePath)for names in zip_file.namelist():
zip_file.extract(names,path)
zip_file.close()
import os
zip_file_path ="C:\AA\BB"
file_list = os.listdir(path)
abs_path =[]for a in file_list:
x = zip_file_path+'\\'+a
print x
abs_path.append(x)for f in abs_path:
zip=zipfile.ZipFile(f)
zip.extractall(zip_file_path)
Isso não contém validação para o arquivo, se não for zip. Se a pasta contiver arquivo não zip, ela falhará.
Respostas:
É isso mesmo!
fonte
from zipfile import ZipFile
. Ao usá-lo, você não precisa mais usarzipfile.ZipFile
e pode usá-loZipFile(zip_file_name)
.Se você estiver usando o Python 3.2 ou posterior:
Você não precisa usar o fechamento ou tentar / capturar com isso, pois ele usa a construção do gerenciador de contexto .
fonte
zipfile
+pathlib
= vitória. importa se eu atualizar ligeiramente a sua resposta?Use o
extractall
método, se você estiver usando o Python 2.6 ou superiorfonte
Você também pode importar apenas
ZipFile
:Funciona em Python 2 e Python 3 .
fonte
import zipfile.ZipFile
geraModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a package
na 3.6.5. Estou aberto a ser um erro de operador da minha parte, mas não sei o que é.tente isto:
path: descompacta o caminho do arquivo
fonte
Isso não contém validação para o arquivo, se não for zip. Se a pasta contiver arquivo não zip, ela falhará.
fonte