Leí la zipfiledocumentación , pero no podía entender cómo descomprimir un archivo, solo cómo comprimir un archivo. ¿Cómo descomprimo todo el contenido de un archivo zip en el mismo directorio?
¿Qué sucede si el contenido del archivo .zip es el mismo en todos los archivos .zip? ¿Cómo cambiar el nombre del contenido antes de extraerlo? ejemplo: 1.zip 2.zip .. todos contienen content.txt: ¿extraer todo como 1content.txt 2content.txt?
iratzhash
8
@iratzhash Normalmente creo un nuevo directorio temporal para los contenidos usando tempfile: docs.python.org/3/library/tempfile.html Descomprimo el directorio temporal y muevo / organizo los archivos desde allí.
Dave Forgac
8
@ 3kstc lo haría from zipfile import ZipFile. Al usarlo, ya no necesita usar zipfile.ZipFile, y puede usar ZipFile(zip_file_name).
Debug255
@iratzhash Me doy cuenta de que comentaste hace 1,5 años. Pero para que otros lo sepan, generalmente los contenidos dentro de un archivo zip son de solo lectura. Una buena respuesta está aquí por "bouke"
Debug255
Es una especie de meta nota, pero la edición de noviembre de 2018 hace que esto sea prácticamente idéntico a otra respuesta que ya usaba el administrador de contexto (y enlaces a lo que eso significa).
Engineero
304
Si está utilizando Python 3.2 o posterior:
import zipfile
with zipfile.ZipFile("file.zip","r")as zip_ref:
zip_ref.extractall("targetdir")
No necesita usar el cierre o try / catch con esto ya que usa la
construcción del administrador de contexto .
Gracias por su atención @MylesHollowed Sin embargo, esta no es una copia de la respuesta aceptada. Estoy de acuerdo en que son similares entre sí, pero son diferentes. Esto también lo indica su comentario, porque el aceptado es definitivamente mejor para usted que el mío. Si fuera una copia, sería lo mismo ... Para alguien, mi respuesta puede ser valiosa porque tal vez sea más legible y, como notaron, importar menos código ... Es por estas diferencias que decidí poner mi respuesta para dar una alternativa ¿No es por eso que podemos poner otras respuestas después de aceptar una? Todo lo mejor
simhumileco
¿Qué hay de malo con esta respuesta? ¿Por qué alguien le dio un punto negativo? Después de todo, es la respuesta a la pregunta y se distingue por su simplicidad en comparación con otras respuestas, lo que puede ser importante para algunas personas que buscan una respuesta. ¿No es así?
simhumileco
1
@MylesHollowed import zipfile.ZipFilegenera ModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a packageen 3.6.5. Estoy abierto a que sea un error del operador de mi parte, pero no sé qué es.
MikeF
6
prueba esto :
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)
Esto no contiene validación para el archivo si no es zip. Si la carpeta contiene un archivo que no es .zip, fallará.
Respuestas:
¡Eso es practicamente todo!
fuente
from zipfile import ZipFile
. Al usarlo, ya no necesita usarzipfile.ZipFile
, y puede usarZipFile(zip_file_name)
.Si está utilizando Python 3.2 o posterior:
No necesita usar el cierre o try / catch con esto ya que usa la construcción del administrador de contexto .
fuente
zipfile
+pathlib
= ganar. ¿te importa si actualizo ligeramente tu respuesta?Use el
extractall
método, si está usando Python 2.6+fuente
También puede importar solo
ZipFile
:Funciona en Python 2 y Python 3 .
fuente
import zipfile.ZipFile
generaModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a package
en 3.6.5. Estoy abierto a que sea un error del operador de mi parte, pero no sé qué es.prueba esto :
ruta: descomprimir la ruta del archivo
fuente
Esto no contiene validación para el archivo si no es zip. Si la carpeta contiene un archivo que no es .zip, fallará.
fuente