Python Language
Trabajando con archivos ZIP
Buscar..
Sintaxis
- importar archivo zip
- clase zipfile. ZipFile ( archivo, modo = 'r', compresión = ZIP_STORED, allowZip64 = True )
Observaciones
Si intenta abrir un archivo que no es un archivo ZIP, se zipfile.BadZipFile
la excepción zipfile.BadZipFile
.
En Python 2.7, este fue escrito zipfile.BadZipfile
, y este nombre antiguo se conserva junto con el nuevo en Python 3.2+
Apertura de archivos zip
Para comenzar, importe el módulo zipfile
y establezca el nombre del archivo.
import zipfile
filename = 'zipfile.zip'
Trabajar con archivos zip es muy similar a trabajar con archivos , usted crea el objeto abriendo el archivo zip, que le permite trabajar en él antes de cerrar el archivo nuevamente.
zip = zipfile.ZipFile(filename)
print(zip)
# <zipfile.ZipFile object at 0x0000000002E51A90>
zip.close()
En Python 2.7 y en Python 3 versiones superiores a 3.2, podemos usar el administrador de contexto with
. Abrimos el archivo en modo "leer", y luego imprimimos una lista de nombres de archivos:
with zipfile.ZipFile(filename, 'r') as z:
print(zip)
# <zipfile.ZipFile object at 0x0000000002E51A90>
Examinando los contenidos de Zipfile
Hay algunas formas de inspeccionar el contenido de un archivo zip. Se puede utilizar el printdir
que acaba de obtener una variedad de información que se envía a stdout
with zipfile.ZipFile(filename) as zip:
zip.printdir()
# Out:
# File Name Modified Size
# pyexpat.pyd 2016-06-25 22:13:34 157336
# python.exe 2016-06-25 22:13:34 39576
# python3.dll 2016-06-25 22:13:34 51864
# python35.dll 2016-06-25 22:13:34 3127960
# etc.
También podemos obtener una lista de nombres de archivo con la namelist
método. Aquí, simplemente imprimimos la lista:
with zipfile.ZipFile(filename) as zip:
print(zip.namelist())
# Out: ['pyexpat.pyd', 'python.exe', 'python3.dll', 'python35.dll', ... etc. ...]
En lugar de namelist
de namelist
, podemos llamar al método infolist
, que devuelve una lista de objetos ZipInfo
, que contienen información adicional sobre cada archivo, por ejemplo, una marca de tiempo y el tamaño del archivo:
with zipfile.ZipFile(filename) as zip:
info = zip.infolist()
print(zip[0].filename)
print(zip[0].date_time)
print(info[0].file_size)
# Out: pyexpat.pyd
# Out: (2016, 6, 25, 22, 13, 34)
# Out: 157336
Extraer el contenido del archivo zip a un directorio.
Extraer todo el contenido de un archivo zip
import zipfile
with zipfile.ZipFile('zipfile.zip','r') as zfile:
zfile.extractall('path')
Si desea extraer un solo archivo, use el método de extracción, toma la lista de nombres y la ruta como parámetro de entrada
import zipfile
f=open('zipfile.zip','rb')
zfile=zipfile.ZipFile(f)
for cont in zfile.namelist():
zfile.extract(cont,path)
Creando nuevos archivos
Para crear un nuevo archivo, abra el archivo zip con el modo de escritura.
import zipfile
new_arch=zipfile.ZipFile("filename.zip",mode="w")
Para agregar archivos a este archivo use el método write ().
new_arch.write('filename.txt','filename_in_archive.txt') #first parameter is filename and second parameter is filename in archive by default filename will taken if not provided
new_arch.close()
Si desea escribir una cadena de bytes en el archivo, puede usar el método writestr ().
str_bytes="string buffer"
new_arch.writestr('filename_string_in_archive.txt',str_bytes)
new_arch.close()