Python: Cómo descomprimir un archivo | Extraer archivos individuales, múltiples o todos los archivos de un archivo ZIP

En este artículo discutiremos diferentes maneras de descomprimir o extraer archivos individuales, múltiples o todos los archivos de un archivo ZIP al directorio actual o diferente.

En el módulo zipfile de Python, la clase ZipFile proporciona una función miembro para extraer todo el contenido de un archivo ZIP,

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

Acepta los siguientes argumentos :

  • path : ubicación donde se necesita extraer el archivo zip, si no se proporciona extraerá el contenido en el directorio actual.
  • members : lista de archivos a extraer. Extraerá todos los archivos del zip si no se proporciona este argumento.
  • pwd : Si el archivo zip está encriptado entonces pase la contraseña en este argumento por defecto es None.

Módulo requerido :

from zipfile import ZipFile

Usemos esto para extraer todo el contenido de los archivos zip.

Extraer todos los archivos de un archivo zip al directorio actual

Supongamos que tenemos un archivo zip ‘sample.zip’. en nuestro directorio actual, veamos cómo extraer todos los archivos de él.
Para descomprimirlo primero crea un objeto ZipFile abriendo el archivo zip en modo lectura y luego llama a extractall() en ese objeto es decir.

# 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()

Extraerá todos los archivos del zip en el directorio actual. Si los archivos con el mismo nombre ya están presentes en la ubicación de extracción, entonces sobrescribirá esos archivos.

Extraer todos los archivos de un archivo zip a un directorio diferente

Para extraer todos los archivos de un archivo zip a un directorio diferente, podemos pasar la ubicación de destino como argumento en extractall(). La ruta puede ser relativa o absoluta.

# 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')

Extraerá todos los archivos de ‘sample.zip’ en la carpeta temporal.

Extraer unos pocos archivos de un archivo zip grande basándose en una condición

Supongamos que tenemos un archivo zip muy grande y necesitamos unos pocos archivos de los miles que hay en el archivo. Descomprimir todos los archivos de un archivo zip grande puede llevar minutos. Pero si estamos interesados en algunos de los archivos archivados sólo, entonces en lugar de descomprimir todo el archivo podemos extraer un solo archivo también desde el archivo zip.

En el módulo zipfile de Python, la clase ZipFile proporciona una función miembro para extraer un solo de un archivo ZIP,

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

Acepta los siguientes argumentos :

  • miembro : Nombre completo del archivo a extraer. Debe ser uno de la lista de nombres de archivos devueltos por ZipFile.namelist()
  • path : ubicación donde el archivo zip necesita ser extraído, si no se proporciona extraerá el archivo en el directorio actual.
  • pwd : Si el archivo zip está encriptado entonces pase la contraseña en este argumento por defecto es None.

Usemos esto para extraer sólo los archivos csv de un archivo zip, es decir,

# 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')

Extraerá sólo los archivos csv de un archivo zip dado.

El ejemplo completo es el siguiente,

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()

Deja una respuesta

Tu dirección de correo electrónico no será publicada.