Si ha estado usando computadoras durante algún tiempo, probablemente se haya cruzado con los archivos .cremallera extensión. Son archivos especiales que pueden contener el contenido comprimido de muchos otros archivos, carpetas y subcarpetas. Esto los hace bastante útiles para transferir archivos a través de Internet. ¿Sabías que puedes usar Python para comprimir o extraer archivos??
Este tutorial te enseñará cómo usar el archivo zip módulo en Python, para extraer o comprimir archivos individuales o múltiples a la vez.
Este es fácil y requiere muy poco código. Comenzamos importando el archivo zip Módulo y luego abra el objeto ZipFile en modo de escritura especificando el segundo parámetro como 'w'. El primer parámetro es la ruta al propio archivo. Aquí está el código que necesitas:
importar archivo zip jungle_zip = zipfile.ZipFile ('C: \\ Stories \\ Fantasy \\ jungle.zip', 'w') jungle_zip.write ('C: \\ Stories \\ Fantasy \\ jungle.pdf', compress_type = zipfile.ZIP_DEFLATED) jungle_zip.close ()
Tenga en cuenta que especificaré la ruta en todos los fragmentos de código en un formato de estilo de Windows; Tendrá que hacer los cambios apropiados si está en Linux o Mac.
Puede especificar diferentes métodos de compresión para comprimir archivos. Los métodos más nuevos BZIP2
y LZMA
se agregaron a la versión 3.3 de Python, y también existen otras herramientas que no admiten estos dos métodos de compresión. Por esta razón, es seguro usar el DESINFLADO
método. Aún debe probar estos métodos para ver la diferencia en el tamaño del archivo comprimido.
Esto es un poco complejo ya que necesita iterar sobre todos los archivos. El código siguiente debe comprimir todos los archivos con la extensión pdf en una carpeta determinada:
importar o importar zipfile fantasy_zip = zipfile.ZipFile ('C: \\ Stories \\ Fantasy \\ archive.zip', 'w') para carpetas, subcarpetas, archivos en os.walk ('C: \\ Stories \\ Fantasy '): para archivo en archivos: if file.endswith ('. pdf '): fantasy_zip.write (os.path.join (carpeta, archivo), os.path.relpath (os.path.join (carpeta, archivo) , 'C: \\ Historias \\ Fantasía'), compress_type = zipfile.ZIP_DEFLATED) fantasy_zip.close ()
Esta vez, hemos importado el os
módulo y utiliza su caminar()
Método para revisar todos los archivos y subcarpetas dentro de nuestra carpeta original. Solo estoy comprimiendo los archivos pdf en el directorio. También puede crear diferentes archivos archivados para cada formato usando Si
declaraciones.
Si no desea conservar la estructura del directorio, puede juntar todos los archivos usando la siguiente línea:
fantasy_zip.write (os.path.join (carpeta, archivo), archivo, compress_type = zipfile.ZIP_DEFLATED)
los escribir()
El método acepta tres parámetros. El primer parámetro es el nombre de nuestro archivo que queremos comprimir. El segundo parámetro es opcional y le permite especificar un nombre de archivo diferente para el archivo comprimido. Si no se especifica nada, se usa el nombre original.
Puedes usar el extraer todo()
Método para extraer todos los archivos y carpetas de un archivo zip en el directorio de trabajo actual. También puede pasar un nombre de carpeta a extraer todo()
para extraer todos los archivos y carpetas en un directorio específico. Si la carpeta que pasó no existe, este método creará uno para usted. Aquí está el código que puede utilizar para extraer archivos:
importar zipfile fantasy_zip = zipfile.ZipFile ('C: \\ Stories \\ Fantasy \\ archive.zip') fantasy_zip.extractall ('C: \\ Library \\ Stories \\ Fantasy') fantasy_zip.close ()
Si desea extraer varios archivos, deberá proporcionar el nombre de los archivos que desea extraer como una lista.
Esto es similar a la extracción de múltiples archivos. Una diferencia es que esta vez debe proporcionar primero el nombre de archivo y la ruta para extraerlos más adelante. Además, necesitas usar el extraer()
método en lugar de extraer todo()
. Aquí hay un fragmento de código básico para extraer archivos individuales.
importar el archivo zip fantasy_zip = zipfile.ZipFile ('C: \ Historias \\ Fantasy \\ archive.zip') fantasy_zip.extract ('Fantasy Jungle.pdf', 'C: \\ Stories \\ Fantasy') fantasy_zip.close )
Considere un escenario en el que necesita ver si un archivo zip contiene un archivo específico. Hasta este punto, su única opción para hacerlo es extraer todos los archivos en el archivo. Del mismo modo, es posible que deba extraer solo los archivos que son más grandes que un tamaño específico. los archivo zip
El módulo nos permite consultar los contenidos de un archivo sin extraerlo nunca.
Utilizando la lista de nombres()
El método del objeto ZipFile devolverá una lista de todos los miembros de un archivo por su nombre. Para obtener información sobre un archivo específico en el archivo, puede usar la obtener información()
Método del objeto ZipFile. Esto le dará acceso a información específica de ese archivo, como el tamaño comprimido y no comprimido del archivo o su última modificación. Volveremos a eso más tarde..
Llamando a la obtener información()
El método uno por uno en todos los archivos puede ser un proceso agotador cuando hay muchos archivos que deben procesarse. En este caso, puede utilizar el infolista
Método para devolver una lista que contiene un objeto ZipInfo para cada miembro del archivo. El orden de estos objetos en la lista es el mismo que el de los archivos zip reales.
También puede leer directamente el contenido de un archivo específico del archivo usando la leer (archivo)
método, donde expediente
es el nombre del archivo que pretende leer. Para hacer esto, el archivo debe abrirse en modo de lectura o anexo.
Para obtener el tamaño comprimido de un archivo individual del archivo, puede usar el compress_size
atributo. Del mismo modo, para conocer el tamaño sin comprimir, puede utilizar el tamaño del archivo
atributo.
El siguiente código utiliza las propiedades y los métodos que acabamos de analizar para extraer solo los archivos que tienen un tamaño inferior a 1 MB.
importar zipfile stories_zip = zipfile.ZipFile ('C: \\ Stories \\ Funny \\ archive.zip') para el archivo en stories_zip.namelist (): if stories_zip.getinfo (file) .file_size < 1024*1024: stories_zip.extract(file, 'C:\\Stories\\Short\\Funny') stories_zip.close()
Para saber la fecha y hora en que se modificó por última vez un archivo específico del archivo, puede usar la fecha y hora
atributo. Esto devolverá una tupla de seis valores. Los valores serán el año, mes, día del mes, horas, minutos y segundos, en ese orden específico. El año siempre será mayor o igual a 1980, y las horas, minutos y segundos se basan en cero..
import zipfile stories_zip = zipfile.ZipFile ('C: \\ Stories \\ Funny \\ archive.zip') thirsty_crow_info = stories_zip.getinfo ('The Thirsty Crow.pdf') print (thirsty_crow_info.time) imprimir (thirsty_crow_info.file_size) stories_zip.close ()
Esta información sobre el tamaño del archivo original y el tamaño del archivo comprimido puede ayudarlo a decidir si vale la pena comprimir un archivo. Estoy seguro de que puede ser usado en otras situaciones también.
Como se desprende de este tutorial, utilizando el archivo zip
módulo para comprimir archivos le da mucha flexibilidad. Puede comprimir diferentes archivos en un directorio a diferentes archivos en función de su tipo, nombre o tamaño. También puede decidir si desea conservar la estructura de directorios o no. Del mismo modo, al extraer los archivos, puede extraerlos a la ubicación que desee, según sus propios criterios, como el tamaño, etc..
Para ser honesto, también fue muy emocionante para mí comprimir y extraer archivos escribiendo mi propio código. Espero que hayan disfrutado el tutorial, y si tiene alguna pregunta, hágamelo saber en los comentarios..
Aprende Python con nuestra completa guía de tutoriales de Python, ya sea que estés empezando o seas un programador experimentado que busca aprender nuevas habilidades..