Python: Jak rozbalit soubor | Extrahovat jeden, více nebo všechny soubory z archivu ZIP

V tomto článku probereme různé způsoby rozbalení nebo extrakce jednoho, více nebo všech souborů z archivu ZIP do aktuálního nebo jiného adresáře.

V modulu zipfile jazyka Python poskytuje třída ZipFile členskou funkci pro extrakci celého obsahu z archivu ZIP,

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

Přijímá následující argumenty :

  • cesta : umístění, kam je třeba soubor ZIP extrahovat, pokud není zadána, extrahuje obsah v aktuálním adresáři.
  • členy : seznam souborů, které mají být extrahovány. Pokud není tento argument uveden, vyextrahuje všechny soubory v zip.
  • pwd : Pokud je soubor zip zašifrovaný, předejte v tomto argumentu heslo, výchozí hodnota je Žádné.

Potřebný modul :

from zipfile import ZipFile

Použijeme jej k vyextrahování celého obsahu souborů zip.

Vyextrahujte všechny soubory ze souboru zip do aktuálního adresáře

Předpokládejme, že máme soubor zip ‚sample.zip‘. v našem aktuálním adresáři, podívejme se, jak z něj vyjmout všechny soubory.
Pro rozbalení nejprve vytvořte objekt ZipFile otevřením souboru zip v režimu čtení a poté zavolejte extractall() na tomto objektu, tj.

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

Vyjme všechny soubory v zip v aktuálním adresáři. Pokud jsou v místě extrakce již přítomny soubory se stejným názvem, pak tyto soubory přepíše.

Extrahovat všechny soubory ze souboru zip do jiného adresáře

Chceme-li extrahovat všechny soubory ze souboru zip do jiného adresáře, můžeme cílové umístění předat jako argument v extractall(). Cesta může být relativní nebo absolutní.

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

Vyextrahuje všechny soubory v ‚sample.zip‘ do adresáře temp.

Vyextrahuje několik souborů z velkého souboru zip na základě podmínky

Předpokládejme, že máme velmi velký soubor zip a potřebujeme několik souborů z tisíců souborů v archivu. Rozbalení všech souborů z velkého zipu může trvat několik minut. Pokud nás však zajímá jen několik málo archivovaných souborů, můžeme místo rozbalování celého souboru rozbalit ze souboru ZIP také jeden soubor.

V modulu ZIPfile jazyka Python poskytuje třída ZipFile členskou funkci pro rozbalení jednoho souboru ze souboru ZIP,

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

Přijímá následující argumenty :

  • člen : Úplný název souboru, který má být rozbalen. Měl by to být jeden ze seznamu názvů archivovaných souborů vrácených funkcí ZipFile.namelist()
  • cesta : umístění, kam má být soubor ZIP extrahován, pokud není zadán, bude extrahován soubor v aktuálním adresáři.
  • pwd : Pokud je soubor ZIP zašifrován, pak v tomto argumentu předejte heslo, výchozí hodnota je None.

Použijeme jej k extrakci pouze souborů csv ze souboru zip, tj.

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

Z daného archivu zip extrahuje pouze soubory csv.

Úplný příklad je následující,

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

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.