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