Recherche de site Web

Comment compresser et décompresser des fichiers à l'aide de Python


Si vous créez une application qui gère des fichiers, envisagez d'utiliser zip pour économiser de l'espace.

La compression est une manière élégante de compresser plusieurs fichiers et de les combiner en un seul. Cela permet d'économiser non seulement de l'espace de stockage mais également de la bande passante lors du transfert d'un fichier sur un réseau. L'une des meilleures fonctionnalités de zip est qu'il fonctionne sur toutes les principales plates-formes : Windows, Linux et Mac.

Zip utilise une compression sans perte afin de conserver toutes les données lors de leur compression et de leur décompression. Vous pouvez également crypter et décrypter vos fichiers zip.

Avec autant de fonctionnalités à explorer, découvrez comment lire, compresser et décompresser des fichiers à l'aide du module Python zipfile.

Qu'est-ce que le module zipfile ?

Vous pouvez utiliser le module zipfile standard pour manipuler des fichiers zip à l'aide de Python. Avec ce module, vous pouvez ouvrir et lire des fichiers zip, lire leurs métadonnées, créer un fichier zip, le compresser et décompresser des fichiers. Il existe trois méthodes de compression disponibles : Deflate, Bzip2 et LZMA.

L'une des choses qui manquent au module est la capacité de gérer des fichiers multi-disques, mais il gère l'extension ZIP64. Il peut également décrypter les archives zip mais pas les chiffrer. En utilisant le module zipfile, vous pouvez obtenir les métadonnées du fichier zip telles que la date et l'heure de modification. Vous pouvez également récupérer des détails tels que le système d'exploitation utilisé pour créer le fichier, la version du zip et la taille du fichier au format compressé et non compressé.

Comment compresser des fichiers à l'aide de Python

Vous pouvez compresser plusieurs fichiers dans une seule archive à l'aide du module zipfile de Python. Importez le module ZipFile à partir du package zipfile pour effectuer les opérations zip requises. Importez également le module os pour sélectionner et enregistrer les fichiers.

Définissez une fonction get_all_file_paths(). Il doit accepter un paramètre de répertoire contenant le chemin d'accès au dossier contenant les fichiers à compresser.

Initialisez une liste vide qui stockera la liste des chemins de fichiers. Utilisez une boucle for pour obtenir le contenu complet du répertoire cible à l'aide de la fonction os.walk(). Cette fonction récupère les noms de fichiers dans une arborescence de répertoires en se déplaçant le long de celle-ci selon une approche descendante ou ascendante. Pour chaque répertoire, la fonction renvoie un triple tuple contenant la racine, les répertoires et les fichiers.

La racine est une chaîne qui contient le chemin complet du répertoire. La liste des répertoires comprend tous les sous-répertoires contenus dans le répertoire. La liste des fichiers contient tous les fichiers présents dans le répertoire.

À l’intérieur de la boucle, déclarez une autre boucle pour parcourir la liste de fichiers. Utilisez la fonction os.path.join() pour combiner le nom du répertoire avec chaque nom de fichier afin de créer un chemin complet. Ensuite, ajoutez ce nom de fichier complet à la liste que vous avez créée précédemment. Une fois cette opération terminée, renvoyez la liste des chemins de fichiers.

# import the required modules
from zipfile import ZipFile
import os
# create a function to get all the file paths
def get_all_file_paths(directory):
    # initializing empty list to store file paths
    file_paths = []
    # navigate through the files
    for root, directories, files in os.walk(directory):
        for filename in files:
            # join the root and filename to create a complete file path
            filepath = os.path.join(root, filename)
            file_paths.append(filepath)
    # returning all file paths
    return file_paths

Stockez le chemin du dossier contenant les fichiers que vous souhaitez compresser dans une variable appelée répertoire. Appelez la fonction get_all_file_paths() que vous avez créée précédemment et stockez la valeur qu'elle renvoie dans file_paths.

Affichez un message à l'utilisateur pour lui faire savoir que ce sont les fichiers que le programme va compresser. Parcourez les fichiers et affichez leurs noms.

Transmettez le nom que vous souhaitez donner à votre fichier zip ainsi que la spécification selon laquelle le programme renvoie un fichier inscriptible à l'aide de l'instruction with pour gérer les exceptions. Parcourez chaque fichier et utilisez la fonction write() sur le fichier inscriptible dans un fichier zip.

Une fois l'opération terminée, affichez un message expliquant que le programme a compressé tous les fichiers avec succès.

# path to folder you want to zip
directory = './pythonzip'
# calling function to get all file paths in the directory
file_paths = get_all_file_paths(directory)
# printing the list of all files you want to zip
print('List of files that will be zipped:')
for file_name in file_paths:
    print(file_name)
# writing files to a zipfile
with ZipFile('my_file.zip', 'w') as zip:
    # write each file one by one
    for file in file_paths:
        zip.write(file)
print('All files are zipped!')

Comment décompresser des fichiers à l'aide de Python

La mise en œuvre de la décompression de fichiers à l'aide du module zipfile est beaucoup plus simple. Importez le package zipfile depuis le module ZipFile et stockez le nom du fichier zip que vous souhaitez extraire dans une variable. Utilisez l'instruction with pour gérer les exceptions et ouvrez le fichier que vous souhaitez extraire en mode lecture. Utilisez la fonction printdir() pour afficher la table des matières des fichiers présents dans le zip.

Affichez un message de progression indiquant que vous extrayez les fichiers et utilisez la fonction extractall() pour extraire le contenu du fichier zip dans le répertoire de travail actuel. Vous pouvez également inclure un paramètre de chemin pour modifier le chemin où le programme extrait les fichiers.

Afficher un message à l'aide de l'instruction print à la fin de l'opération.

# importing the required modules
from zipfile import ZipFile
# pass the name of the zip file you want to extract
file_name = "extract.zip"
# opening the zip file in read mode
with ZipFile(file_name, 'r') as zip:
    # display the contents of the zip file
    zip.printdir()
    # extracting all the files
    print('Extract in progress...')
    zip.extractall()
    print('All files are extracted!')

En savoir plus sur les fichiers Zip

Les fichiers Zip ont gagné en popularité et sont utilisés depuis des décennies. Les sites Web populaires tels que GitHub et Google Drive vous permettent de télécharger une collection de fichiers sous forme d'archive zip. Le programme zip compresse un ensemble de fichiers dans un seul package. Cela contraste avec un outil comme tar qui regroupe les fichiers mais ne les compresse pas.

Si vous souhaitez chiffrer vos fichiers à l'aide d'un algorithme plus efficace, les fichiers RAR sont la solution idéale. RAR utilise l'algorithme AES-128 qui est meilleur que l'algorithme de dégonflage utilisé par les fichiers zip. En fin de compte, choisissez celui qui répond le mieux à vos besoins.

Articles connexes: