Zippen is een elegante manier om meerdere bestanden te comprimeren en ze te combineren tot één bestand. Dit bespaart niet alleen opslagruimte, maar ook bandbreedte bij het overdragen van een bestand via een netwerk. Een van de beste eigenschappen van zip is dat het op alle grote platforms werkt: Windows, Linux en Mac.
Zip maakt gebruik van compressie zonder verlies, zodat alle gegevens behouden blijven bij het comprimeren en decomprimeren. U kunt uw zip-bestanden ook versleutelen en ontsleutelen.
Met zoveel functies om te verkennen, ontdek je hoe je bestanden kunt lezen, zippen en uitpakken met de Python zipfile-module.
Wat is de zipfile-module?
U kunt de standaard zipfile-module gebruiken om zip-bestanden te manipuleren met behulp van Python. Met deze module kunt u zip-bestanden openen en lezen, hun metadata lezen, een zip-bestand maken, comprimeren en bestanden uitpakken. Er zijn drie compressiemethoden beschikbaar: Deflate, Bzip2 en LZMA.
Een van de dingen die de module mist, is de mogelijkheid om bestanden met meerdere schijven te verwerken, maar het kan wel de ZIP64-extensie aan. Het kan ook zip-archieven ontsleutelen, maar niet versleutelen. Met behulp van de zipfile-module kunt u metadata van zip-bestanden verkrijgen, zoals de datum en tijd van wijziging. U kunt ook details ophalen, zoals het besturingssysteem dat is gebruikt om het bestand te maken, de versie van zip en de bestandsgrootte in zowel gecomprimeerde als niet-gecomprimeerde indeling.
Hoe bestanden te zippen met behulp van Python
U kunt meerdere bestanden in één archief zippen met behulp van de zipfile-module van Python. Importeer de Zip bestand moduul uit de Zip bestand pakket om de vereiste zip-bewerkingen uit te voeren. Ook importeren de os module om bestanden te selecteren en op te slaan.
Definieer een functie get_all_file_paths(). Het zou een directoryparameter moeten accepteren die het pad bevat naar de map met de te zippen bestanden.
Initialiseer een lege lijst waarin de lijst met bestandspaden wordt opgeslagen. Gebruik een for-lus om de volledige inhoud van de doelmap te krijgen met behulp van de os.wandeling() functie. Deze functie haalt de bestandsnamen in een mappenboom op door er langs te gaan in een top-down of een bottom-up benadering. Voor elke map retourneert de functie een drievoudig tuple met root, dirs en bestanden.
De root is een tekenreeks die het volledige pad naar de directory bevat. De dirs-lijst bevat alle subdirectories in de directory. De bestandenlijst bevat alle bestanden die aanwezig zijn in de map.
Verklaar een andere binnen de lus lus om de bestandslijst te herhalen. Gebruik de os.pad.join() functie om de naam van de map te combineren met elke bestandsnaam om een compleet pad te maken. Voeg vervolgens deze volledige bestandsnaam toe aan de lijst die u eerder hebt gemaakt. Zodra deze bewerking is voltooid, retourneert u de lijst met bestandspaden.
# importeer de vereiste modules
van Zip bestand importeren Zip bestand
importeren os# maak een functie om alle bestandspaden te krijgen
defget_all_file_paths(directory):
# lege lijst initialiseren om bestandspaden op te slaan
bestandspaden = []# navigeer door de bestanden
voorwortel, mappen, bestandeninos.wandeling(map):
voor bestandsnaam in bestanden:
# verbind de root en de bestandsnaam om een volledig bestandspad te creëren
bestandspad = os.path.join (root, bestandsnaam)
bestandspaden.toevoegen(bestandspad)
# alle bestandspaden retourneren
opbrengst bestandspaden
Bewaar het pad naar de map die de bestanden bevat die u wilt zippen in een variabele met de naam directory. Roep de functie aan, get_all_file_paths() die u eerder hebt gemaakt en sla de waarde op waarin deze wordt geretourneerd bestandspaden.
Geef een bericht weer aan de gebruiker om hen te laten weten dat dit de bestanden zijn die het programma zal zippen. Herhaal de bestanden en geef hun namen weer.
Geef de naam door die u wilt dat uw zip-bestand heeft, samen met de specificatie dat het programma een beschrijfbaar bestand retourneert met behulp van de instructie with om uitzonderingen af te handelen. Herhaal elk bestand en gebruik de functie write() over het beschrijfbare bestand naar een zipbestand.
Wanneer de bewerking is voltooid, voert u een bericht uit waarin wordt uitgelegd dat het programma alle bestanden met succes heeft gecomprimeerd.
# pad naar de map die je wilt zippen
map = './pythonzip'# aanroepende functie om alle bestandspaden in de directory op te halen
file_paths = get_all_file_paths (directory)# de lijst afdrukken van alle bestanden die u wilt zippen
afdrukken('Lijst met bestanden die zullen worden gecomprimeerd:')voor bestandsnaam in bestandspaden:
afdrukken(bestandsnaam)# bestanden schrijven naar een zipbestand
met Zip bestand('mijn_bestand.zip', 'w') als ritssluiting:
# schrijf elk bestand een voor een
voor bestand in bestandspaden:
ritssluiting.schrijven(bestand)
afdrukken('Alle bestanden zijn ingepakt!')
Bestanden uitpakken met Python
De implementatie van het uitpakken van bestanden met behulp van de zipfile-module is een stuk eenvoudiger. Importeer de Zip bestand pakket van de Zip bestand module en sla de naam van het zip-bestand dat u wilt uitpakken op in een variabele. Gebruik de instructie with om uitzonderingen af te handelen en open het bestand dat u wilt uitpakken in de leesmodus. Gebruik de printdir() functie om de inhoudsopgave van bestanden in de zip weer te geven.
Geef een voortgangsbericht weer dat u de bestanden aan het uitpakken bent en gebruik het extractall() functie om de inhoud van het zip-bestand uit te pakken naar de huidige werkmap. U kunt ook een padparameter opnemen om het pad te wijzigen waar het programma de bestanden uitpakt.
Geef een bericht weer met behulp van de afdrukken verklaring over de voltooiing van de operatie.
# de vereiste modules importeren
van Zip bestand importeren Zip bestand# geef de naam door van het zip-bestand dat u wilt uitpakken
bestandsnaam = "uitpakken.zip"# het zip-bestand openen in leesmodus
met ZipFile (bestandsnaam, 'R') als ritssluiting:
# toon de inhoud van het zip-bestand
ritssluiting.printdir()
# alle bestanden uitpakken
afdrukken('Extract bezig...')
ritssluiting.uittreksel()
afdrukken('Alle bestanden zijn uitgepakt!')
Meer over zip-bestanden
Zip-bestanden zijn enorm populair geworden en worden al tientallen jaren gebruikt. Op populaire websites zoals GitHub en Google Drive kun je een verzameling bestanden downloaden als zip-archief. Het zip-programma comprimeert een set bestanden tot één pakket. Dit in tegenstelling tot een tool als tar die bestanden samen verpakt maar niet comprimeert.
Als u uw bestanden wilt versleutelen met een efficiënter algoritme, zijn RAR-bestanden de juiste keuze. RAR gebruikt het AES-128-algoritme dat beter is dan het deflate-algoritme dat wordt gebruikt door zip-bestanden. Kies uiteindelijk degene die het beste aan uw behoefte voldoet.