Python : Comment décompresser un fichier | Extraire un, plusieurs ou tous les fichiers d’une archive ZIP

Dans cet article, nous allons discuter des différentes façons de décompresser ou d’extraire un, plusieurs ou tous les fichiers d’une archive zip dans le répertoire actuel ou différent.

Dans le module zipfile de Python, la classe ZipFile fournit une fonction membre pour extraire tout le contenu d’une archive ZIP,

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

Elle accepte les arguments suivants :

  • path : emplacement où le fichier zip doit être extrait, s’il n’est pas fourni, il extraira le contenu dans le répertoire courant.
  • members : liste des fichiers à extraire. Il extraira tous les fichiers du zip si cet argument n’est pas fourni.
  • pwd : Si le fichier zip est crypté alors passez le mot de passe dans cet argument par défaut est None.

Module requis :

from zipfile import ZipFile

Utilisons-le pour extraire tout le contenu des fichiers zip.

Extraire tous les fichiers d’un fichier zip dans le répertoire courant

Supposons que nous avons un fichier zip ‘sample.zip’. dans notre répertoire courant, voyons comment extraire tous les fichiers de celui-ci.
Pour le décompresser, créez d’abord un objet ZipFile en ouvrant le fichier zip en mode lecture, puis appelez extractall() sur cet objet, c’est-à-dire

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

Il extraira tous les fichiers du zip dans le répertoire courant. Si des fichiers de même nom sont déjà présents à l’emplacement d’extraction, alors il écrasera ces fichiers.

Extraire tous les fichiers d’un fichier zip vers un répertoire différent

Pour extraire tous les fichiers d’un fichier zip vers un répertoire différent, nous pouvons passer l’emplacement de destination comme argument dans extractall(). Le chemin peut être relatif ou absolu.

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

Il extraira tous les fichiers de ‘sample.zip’ dans le dossier temp.

Extraire quelques fichiers d’un grand fichier zip en fonction de la condition

Supposons que nous avons un très grand fichier zip et que nous avons besoin de quelques fichiers parmi les milliers de fichiers de l’archive. Dézipper tous les fichiers d’un grand zip peut prendre des minutes. Mais si nous sommes intéressés par quelques-uns des fichiers archivés seulement, alors au lieu de décompresser le fichier entier, nous pouvons extraire un seul fichier aussi du fichier zip.

Dans le module zipfile de Python, la classe ZipFile fournit une fonction membre pour extraire un seul d’un fichier ZIP,

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

Elle accepte les arguments suivants :

  • membre : Nom complet du fichier à extraire. Il doit être un de la liste des noms de fichiers archivés renvoyée par ZipFile.namelist()
  • path : emplacement où le fichier zip doit être extrait, s’il n’est pas fourni, il extraira le fichier dans le répertoire courant.
  • pwd : Si le fichier zip est crypté, alors passez le mot de passe dans cet argument ; la valeur par défaut est None.

Utilisons-le pour extraire uniquement les fichiers csv d’un fichier zip c’est-à-dire

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

Il extraira uniquement les fichiers csv d’une archive zip donnée.

L’exemple complet est le suivant,

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

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.