Python: How to unzip a file | Extract Single, multiple or all files from a ZIP archive

În acest articol vom discuta diferite moduri de a descompune sau extrage fișiere unice, multiple sau toate fișierele din arhiva zip în directorul curent sau în alt director.

În modulul zipfile din Python, clasa ZipFile oferă o funcție membră pentru a extrage tot conținutul unei arhive ZIP,

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

Acesta acceptă următoarele argumente :

  • path : locația unde trebuie extras fișierul zip, dacă nu este furnizată, va extrage conținutul în directorul curent.
  • members : lista de fișiere care trebuie extrase. Se vor extrage toate fișierele din zip dacă acest argument nu este furnizat.
  • pwd : Dacă fișierul zip este criptat, atunci treceți parola în acest argument implicit este None.

Module necesar :

from zipfile import ZipFile

Să folosim acest lucru pentru a extrage tot conținutul din fișierele zip.

Extrage toate fișierele dintr-un fișier zip în directorul curent

Să presupunem că avem un fișier zip ‘sample.zip’. în directorul nostru curent, să vedem cum să extragem toate fișierele din el.
Pentru a-l descompune, mai întâi creați un obiect ZipFile deschizând fișierul zip în modul de citire și apoi apelați extractall() pe acel obiect, adică.

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

Se vor extrage toate fișierele din zip în directorul curent. Dacă fișierele cu același nume sunt deja prezente în locația de extracție, atunci va suprascrie acele fișiere.

Extrage toate fișierele dintr-un fișier zip în alt director

Pentru a extrage toate fișierele din fișierul zip într-un alt director, putem trece locația de destinație ca argument în extractall(). Calea de acces poate fi relativă sau absolută.

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

Se vor extrage toate fișierele din ‘sample.zip’ în folderul temp.

Extrage câteva fișiere dintr-un fișier zip mare pe baza unei condiții

Supunem că avem un fișier zip foarte mare și avem nevoie de câteva fișiere din miile de fișiere din arhivă. Descomprimarea tuturor fișierelor din zipul mare poate dura câteva minute. Dar dacă suntem interesați doar de câteva dintre fișierele arhivate, atunci, în loc să descompactăm întregul fișier, putem extrage și un singur fișier din fișierul zip.

În modulul zipfile din Python, clasa ZipFile oferă o funcție membră pentru a extrage un singur fișier dintr-un fișier ZIP,

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

Acesta acceptă următoarele argumente :

  • member : Numele complet al fișierului care urmează să fie extras. Acesta trebuie să fie unul din lista de nume de fișiere arhivate returnată de ZipFile.namelist()
  • path : locația în care trebuie extras fișierul zip, dacă nu este furnizat, va extrage fișierul din directorul curent.
  • pwd : Dacă fișierul zip este criptat, atunci treceți parola în acest argument valoarea implicită este None.

Să folosim acest lucru pentru a extrage numai fișiere csv dintr-un fișier zip, adică:

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

Se vor extrage numai fișiere csv din arhiva zip dată.

Exemplu complet este următorul,

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

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.