Python

Python gzip-module

Python gzip-module

In deze les zullen we bestuderen hoe we Python kunnen gebruiken gzip module om te lezen en schrijven naar de gecomprimeerde bestanden in Python. De grootste functie die deze module ons biedt, is dat we gecomprimeerde bestanden kunnen behandelen als normale bestandsobjecten, wat ons de complexiteit van het beheren van bestanden en hun levenscyclus in onze code bespaart en ons in staat stelt ons te concentreren op de kernbedrijfslogica van het programma.De gzip module biedt ons bijna dezelfde functies als de GNU-programma's zoals: gunzip en gzip.

Gecomprimeerde bestanden schrijven met open()

We beginnen met een eenvoudig voorbeeld waarin we een gzip-bestand kunnen maken en er wat gegevens in kunnen schrijven. Hiervoor moeten we een bestand maken en het openen in de schrijfmodus zodat er gegevens in kunnen worden ingevoegd. Laten we een voorbeeldprogramma bekijken waarmee we gegevens in een gzip-bestand kunnen schrijven:

import gzip
import io
importeer os
output_file = 'linxhint_demo'.tekst.gz'
write_mode = 'wb'
met gzip.open(output_file, write_mode) als uitvoer:
met io.TextIOWrapper(output, encoding='utf-8') als codering:
coderen.write('We kunnen alles naar het bestand schrijven wat we willen.\n')
print(output_file),
'bevat', os.stat(output_file).st_size, 'bytes')
os.system('bestand -b --mime '.formaat(output_file))

Dit is wat we terugkrijgen met deze opdracht:

Schrijven naar zip-bestand

Als je nu naar de mappenstructuur kijkt waarin je dit script hebt uitgevoerd, zou er een nieuw bestand moeten zijn met de naam die we in ons programma hierboven hebben gegeven.

Meerdere regels naar een gecomprimeerd bestand schrijven

We kunnen ook meerdere regels of eigenlijk een willekeurig aantal regels in ons gzip-bestand schrijven op een vergelijkbare manier als in het vorige voorbeeld. Om dit voorbeeld anders te maken, zullen we ook gebruik maken van de itertools-module. Laten we eens kijken naar het voorbeeldprogramma:

import gzip
import io
importeer os
itertools importeren
output_file = 'linxhint_demo'.tekst.gz'
write_mode = 'wb'
met gzip.open(output_file, write_mode) als uitvoer:
met io.TextIOWrapper(output, encoding='utf-8') als enc:
enc.schrijflijnen(
itertools.repeat('LinuxHint, dezelfde regel herhalen!.\n', 10)
)
os.system('gzcat linxhint_demo'.tekst.gz')

Laten we de uitvoer voor deze opdracht bekijken:

Meerdere regels schrijven

Gecomprimeerde gegevens lezen

We kunnen ook het gecomprimeerde bestand lezen dat we in het laatste voorbeeld hebben gemaakt met behulp van de gzip-module met een heel eenvoudige aanroep naar Open functie:

import gzip
import io
importeer os
file_name = 'linxhint_demo.tekst.gz'
file_mode = 'rb'
met gzip.open(bestandsnaam, bestandsmodus) als invoerbestand:
met io.TextIOWrapper(input_file, encoding='utf-8') als dec:
afdrukken (december).lezen())

Dit is wat we terugkrijgen met deze opdracht:

Een gzip-bestand lezen

Streams lezen

Omdat tekstbestanden erg groot kunnen zijn, is het slim om deze bestanden in een stream te openen in plaats van het volledige bestand in een enkel object te laden, dat veel systeemgeheugen in beslag neemt en in sommige gevallen zelfs het proces kan veroorzaken volledig crashen. Laten we eens kijken naar een voorbeeldprogramma dat het gegeven gecomprimeerde bestand in een stream leest:

import gzip
van io import BytesIO
import binascii
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Herhaalde regel x keer.\n' * 8
print('Niet-gecomprimeerde gegevens:', len(niet_gecomprimeerd))
print(niet_gecomprimeerd)
buf = BytesIO()
met gzip.GzipFile(mode=mode_write, fileobj=buf) als bestand:
het dossier.schrijven (niet_gecomprimeerd)
gecomprimeerd = buf.haalwaarde()
print('Gecomprimeerde gegevens:', len(gecomprimeerd))
print(binascii .).hexlify (gecomprimeerd))
in_buffer = BytesIO (gecomprimeerd)
met gzip.GzipFile(mode=mode_read, fileobj=in_buffer) als bestand:
read_data = bestand.lezen(len(niet_gecomprimeerd))
print('\nOpnieuw lezen:', len(read_data))
print(read_data)

Laten we de uitvoer voor deze opdracht bekijken:

Gzip-bestand lezen in een stream

Hoewel het programma een beetje lang was, hebben we eigenlijk gewoon Python-modules gebruikt om het bestand te openen en de inhoud naar de console te streamen met een gebufferd lezerobject.

Conclusie

In deze les hebben we gekeken hoe we de Python gzip-module kunnen gebruiken om bestanden in Python te comprimeren en te decomprimeren. De grootste functie die deze bibliotheek ons ​​biedt, is dat we gecomprimeerde bestanden kunnen behandelen als normale bestandsobjecten.

Lees hier meer op Python gebaseerde berichten.

Hoe FPS-teller in Linux-games te tonen
Linux-gaming kreeg een grote duw toen Valve in 2012 Linux-ondersteuning voor Steam-client en hun games aankondigde. Sindsdien hebben veel AAA- en indi...
Sid Meier's Civilization VI downloaden en spelen op Linux and
Inleiding tot het spel Civilization 6 is een moderne versie van het klassieke concept dat werd geïntroduceerd in de serie Age of Empires-games. Het id...
Doom installeren en spelen op Linux
Inleiding tot Doom De Doom-serie is ontstaan ​​in de jaren 90 na de release van de originele Doom. Het was meteen een hit en vanaf die tijd heeft de g...