Compression et extraction de fichiers en Python

Si vous utilisez des ordinateurs depuis un certain temps, vous avez probablement rencontré des fichiers avec le .Zip *: français extension. Ce sont des fichiers spéciaux pouvant contenir le contenu compressé de nombreux autres fichiers, dossiers et sous-dossiers. Cela les rend très utiles pour transférer des fichiers sur Internet. Saviez-vous que vous pouvez utiliser Python pour compresser ou extraire des fichiers?

Ce tutoriel va vous apprendre à utiliser le fichier zip module en Python, pour extraire ou compresser des fichiers individuels ou multiples à la fois.

Compression de fichiers individuels

Celui-ci est facile et nécessite très peu de code. Nous commençons par importer le fichier zip module puis ouvrez l’objet ZipFile en mode écriture en spécifiant le second paramètre sous la forme "w". Le premier paramètre est le chemin d'accès au fichier lui-même. Voici le code dont vous avez besoin:

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

Veuillez noter que je spécifierai le chemin dans tous les extraits de code dans un format de style Windows; vous devrez faire les changements appropriés si vous êtes sous Linux ou Mac.

Vous pouvez spécifier différentes méthodes de compression pour compresser les fichiers. Les nouvelles méthodes BZIP2 et LZMA ont été ajoutés à la version 3.3 de Python, et il existe également d’autres outils qui ne prennent pas en charge ces deux méthodes de compression. Pour cette raison, il n’est pas dangereux d’utiliser le Dégonflé méthode. Vous devriez quand même essayer ces méthodes pour voir la différence de taille du fichier compressé..

Compression de plusieurs fichiers

Ceci est légèrement complexe car vous devez parcourir tous les fichiers. Le code ci-dessous devrait compresser tous les fichiers avec l’extension pdf dans un dossier donné:

import os import zipfile fantasy_zip = zipfile.ZipFile ('C: \\ Stories \\ Fantasy \\ archive.zip', 'w') pour le dossier, les sous-dossiers, les fichiers dans os.walk ('C: \\ Stories \\ Fantasy '): pour le fichier dans les fichiers: if file.endswith ('. pdf '): fantasy_zip.write (os.path.join (dossier, fichier), os.path.relpath (os.path.join (dossier, fichier) , 'C: \\ Stories \\ Fantasy'), compress_type = zipfile.ZIP_DEFLATED) fantasy_zip.close () 

Cette fois, nous avons importé le os module et utilisé son marche() méthode pour parcourir tous les fichiers et sous-dossiers dans notre dossier original. Je ne fais que compresser les fichiers pdf dans le répertoire. Vous pouvez également créer différents fichiers archivés pour chaque format à l'aide de si des déclarations.

Si vous ne souhaitez pas conserver la structure de répertoires, vous pouvez regrouper tous les fichiers en utilisant la ligne suivante:

fantasy_zip.write (os.path.join (dossier, fichier), fichier, compress_type = zipfile.ZIP_DEFLATED)

le écrire() La méthode accepte trois paramètres. Le premier paramètre est le nom de notre fichier que nous voulons compresser. Le deuxième paramètre est facultatif et vous permet de spécifier un nom de fichier différent pour le fichier compressé. Si rien n'est spécifié, le nom d'origine est utilisé.

Extraire tous les fichiers

Vous pouvez utiliser le extraire tout() méthode pour extraire tous les fichiers et dossiers d’un fichier zip dans le répertoire de travail en cours. Vous pouvez également transmettre un nom de dossier à extraire tout() pour extraire tous les fichiers et dossiers d’un répertoire spécifique. Si le dossier que vous avez passé n'existe pas, cette méthode en créera un pour vous. Voici le code que vous pouvez utiliser pour extraire des fichiers:

import zipfile fantasy_zip = zipfile.ZipFile ('C: \\ Stories \\ Fantasy \\ archive.zip') fantasy_zip.extractall ('C: \\ Bibliothèque \\ Stories \\ Fantasy') fantasy_zip.close ()

Si vous souhaitez extraire plusieurs fichiers, vous devrez fournir le nom des fichiers à extraire sous forme de liste..

Extraire des fichiers individuels

Ceci est similaire à l'extraction de plusieurs fichiers. Une différence est que cette fois, vous devez d'abord fournir le nom de fichier et le chemin pour les extraire ultérieurement. En outre, vous devez utiliser le extrait() méthode au lieu de extraire tout(). Voici un extrait de code de base pour extraire des fichiers individuels.

import zipfile fantasy_zip = zipfile.ZipFile ('C: \\ Stories \\ Fantasy \\ archive.zip') fantasy_zip.extract ('Fantasy Jungle.pdf', 'C: \\ Stories \\ Fantasy') fantasy_zip.close ( ) 

Lecture de fichiers Zip

Envisagez un scénario dans lequel vous devez savoir si une archive zip contient un fichier spécifique. Jusqu'à présent, votre seule option est d'extraire tous les fichiers de l'archive. De même, vous devrez peut-être extraire uniquement les fichiers dont la taille est supérieure à une taille spécifique. le fichier zip module nous permet de nous renseigner sur le contenu d’une archive sans la moindre extraction.

En utilisant le liste de nom() La méthode de l'objet ZipFile retournera une liste de tous les membres d'une archive par nom. Pour obtenir des informations sur un fichier spécifique de l’archive, vous pouvez utiliser le getinfo () méthode de l'objet ZipFile. Cela vous donnera accès à des informations spécifiques à ce fichier, telles que la taille compressée et non compressée du fichier ou sa dernière heure de modification. Nous y reviendrons plus tard.

Appeler le getinfo () La méthode une par une sur tous les fichiers peut s'avérer fastidieuse lorsque de nombreux fichiers doivent être traités. Dans ce cas, vous pouvez utiliser le infolist () méthode pour renvoyer une liste contenant un objet ZipInfo pour chaque membre de l’archive. L'ordre de ces objets dans la liste est le même que celui des fichiers zip réels. 

Vous pouvez également lire directement le contenu d’un fichier spécifique de l’archive à l’aide du bouton lire (fichier) méthode, où fichier est le nom du fichier que vous avez l'intention de lire. Pour ce faire, l'archive doit être ouverte en mode lecture ou ajout.

Pour obtenir la taille compressée d’un fichier individuel à partir de l’archive, vous pouvez utiliser le compress_size attribut. De même, pour connaître la taille non compressée, vous pouvez utiliser le taille du fichier attribut.

Le code suivant utilise les propriétés et les méthodes décrites précédemment pour extraire uniquement les fichiers dont la taille est inférieure à 1 Mo.

importer zipfile stories_zip = zipfile.ZipFile ('C: \\ Stories \\ Funny \\ archive.zip') pour un fichier situé dans stories_zip.namelist (): if stories_zip.getinfo (file) .file_size < 1024*1024: stories_zip.extract(file, 'C:\\Stories\\Short\\Funny') stories_zip.close()

Pour connaître l'heure et la date de la dernière modification d'un fichier de l'archive, vous pouvez utiliser le date_heure attribut. Cela retournera un tuple de six valeurs. Les valeurs seront l'année, le mois, le jour du mois, les heures, les minutes et les secondes, dans cet ordre spécifique. L'année sera toujours supérieure ou égale à 1980, et les heures, minutes et secondes sont basées sur zéro. 

importer zipfile stories_zip = zipfile.ZipFile ('C: \\ Stories \\ Funny \\ archive.zip') thirsty_crow_info = stories_zip.getinfo ('The Thirsty Crow.pdf') print (thirsty_crow_info.date_time) print print (thirsty_crow_info.file_size) stories_zip.close ()

Ces informations sur la taille du fichier d'origine et la taille du fichier compressé peuvent vous aider à déterminer s'il est intéressant de compresser un fichier. Je suis sûr qu'il peut également être utilisé dans d'autres situations..

Dernières pensées

Comme il ressort de ce tutoriel, en utilisant le fichier zip module de compression de fichiers vous donne beaucoup de flexibilité. Vous pouvez compresser différents fichiers d'un répertoire dans différentes archives en fonction de leur type, leur nom ou leur taille. Vous devez également décider si vous souhaitez conserver la structure de répertoires ou non. De même, lors de l'extraction des fichiers, vous pouvez les extraire à l'emplacement de votre choix, en fonction de vos propres critères tels que la taille, etc..

Pour être honnête, il était également très intéressant pour moi de compresser et d'extraire des fichiers en écrivant mon propre code. J'espère que vous avez apprécié le tutoriel, et si vous avez des questions, s'il vous plaît laissez-moi savoir dans les commentaires.

Apprendre le python

Apprenez Python avec notre guide complet de tutoriel sur Python, que vous soyez débutant ou que vous soyez un codeur chevronné cherchant à acquérir de nouvelles compétences..