logo

Travailler avec des fichiers zip en Python

Cet article explique comment effectuer diverses opérations sur un fichier zip à l'aide d'un simple programme Python. Qu'est-ce qu'un fichier zip ? ZIP est un format de fichier d'archive qui prend en charge la compression des données sans perte. Par compression sans perte, nous entendons que l'algorithme de compression permet de reconstruire parfaitement les données originales à partir des données compressées. Ainsi, un fichier ZIP est un fichier unique contenant un ou plusieurs fichiers compressés offrant un moyen idéal de réduire la taille des fichiers volumineux et de conserver les fichiers associés ensemble. Pourquoi avons-nous besoin de fichiers zip ?
  • Pour réduire les besoins de stockage.
  • Pour améliorer la vitesse de transfert par rapport aux connexions standard.
Pour travailler sur des fichiers zip en utilisant Python, nous utiliserons un module Python intégré appelé fichier zip .

1. Extraire un fichier zip

Python
# importing required modules from zipfile import ZipFile # specifying the zip file name file_name = 'my_python_files.zip' # opening the zip file in READ mode with ZipFile(file_name 'r') as zip: # printing all the contents of the zip file zip.printdir() # extracting all the files print('Extracting all the files now...') zip.extractall() print('Done!') 
The above program extracts a zip file named 'my_python_files.zip' in the same directory as of this python script. The output of above program may look like this: Travailler avec des fichiers zip en Python' title=Essayons de comprendre le code ci-dessus en morceaux :
  • from zipfile import ZipFile
    ZipFile is a class of zipfile module for reading and writing zip files. Here we import only class ZipFile from zipfile module.
  • with ZipFile(file_name 'r') as zip:
    Here a ZipFile object is made by calling ZipFile constructor which accepts zip file name and mode parameters. We create a ZipFile object in LIRE mode et nommez-le comme fermeture éclair .
  • zip.printdir()
    rép_impression() La méthode imprime une table des matières pour l’archive.
  • zip.extractall()
    extraire tout() La méthode extraira tout le contenu du fichier zip dans le répertoire de travail actuel. Vous pouvez également appeler extrait() method to extract any file by specifying its path in the zip file. For example:
    zip.extract('python_files/python_wiki.txt')
    This will extract only the specified file. If you want to read some specific file you can go like this:
    data = zip.read(name_of_file_to_read)

2. Écrire dans un fichier zip

Considérons un répertoire (dossier) avec un tel format : Travailler avec des fichiers zip en Python' title= Here we will need to crawl the whole directory and its sub-directories in order to get a list of all file paths before writing them to a zip file. The following program does this by crawling the directory to be zipped: Python
# importing required modules from zipfile import ZipFile import os def get_all_file_paths(directory): # initializing empty file paths list file_paths = [] # crawling through directory and subdirectories for root directories files in os.walk(directory): for filename in files: # join the two strings in order to form the full filepath. filepath = os.path.join(root filename) file_paths.append(filepath) # returning all file paths return file_paths def main(): # path to folder which needs to be zipped directory = './python_files' # calling function to get all file paths in the directory file_paths = get_all_file_paths(directory) # printing the list of all files to be zipped print('Following files will be zipped:') for file_name in file_paths: print(file_name) # writing files to a zipfile with ZipFile('my_python_files.zip''w') as zip: # writing each file one by one for file in file_paths: zip.write(file) print('All files zipped successfully!') if __name__ == '__main__': main() 
The output of above program looks like this: Travailler avec des fichiers zip en Python' title=Essayons de comprendre le code ci-dessus en le divisant en fragments :
  • def get_all_file_paths(directory): file_paths = [] for root directories files in os.walk(directory): for filename in files: filepath = os.path.join(root filename) file_paths.append(filepath) return file_paths
    First of all to get all file paths in our directory we have created this function which uses the os.walk()  méthode. À chaque itération, tous les fichiers présents dans ce répertoire sont ajoutés à une liste appelée chemins_fichiers . À la fin, nous renvoyons tous les chemins de fichiers.
  • file_paths = get_all_file_paths(directory)
    Here we pass the directory to be zipped to the get_all_file_paths() fonction et obtenez une liste contenant tous les chemins de fichiers.
  • with ZipFile('my_python_files.zip''w') as zip:
    Here we create a ZipFile object in WRITE mode this time.
  • for file in file_paths: zip.write(file)
    Here we write all the files to the zip file one by one using écrire méthode.

3. Obtenir toutes les informations sur un fichier zip



Python
# importing required modules from zipfile import ZipFile import datetime # specifying the zip file name file_name = 'example.zip' # opening the zip file in READ mode with ZipFile(file_name 'r') as zip: for info in zip.infolist(): print(info.filename) print('tModified:t' + str(datetime.datetime(*info.date_time))) print('tSystem:tt' + str(info.create_system) + '(0 = Windows 3 = Unix)') print('tZIP version:t' + str(info.create_version)) print('tCompressed:t' + str(info.compress_size) + ' bytes') print('tUncompressed:t' + str(info.file_size) + ' bytes') 
The output of above program may look like this: ' title=
for info in zip.infolist():
Here liste d'informations() la méthode crée une instance de ZipInfo classe qui contient toutes les informations sur le fichier zip. Nous pouvons accéder à toutes les informations telles que la date de la dernière modification des fichiers, le système de noms de fichiers sur lequel les fichiers ont été créés, la version Zip, la taille des fichiers sous forme compressée et non compressée, etc. Cet article est contribué par Nikhil Kumar . Créer un quiz