Python

Python gzip-Modul

Python gzip-Modul

In dieser Lektion lernen wir, wie wir Python nutzen können gzip Modul zum Lesen und Schreiben in die komprimierten Dateien in Python. Die größte Funktion, die uns dieses Modul bietet, ist, dass wir komprimierte Dateien als normale Dateiobjekte behandeln können, was uns die Komplexität der Verwaltung von Dateien und ihres Lebenszyklus in unserem Code erspart und uns ermöglicht, uns auf die Kerngeschäftslogik des Programms zu konzentrieren.Das gzip Modul bietet uns fast die gleichen Funktionen wie die GNU-Programme wie gunzip und gzip.

Komprimierte Dateien mit open() schreiben

Wir beginnen mit einem einfachen Beispiel, in dem wir eine gzip-Datei erstellen und einige Daten hineinschreiben können. Dazu müssen wir eine Datei erstellen und im Schreibmodus öffnen, damit Daten darin eingefügt werden können. Schauen wir uns ein Beispielprogramm an, mit dem wir Daten in eine gzip-Datei schreiben können:

gzip importieren
importieren
Importieren von OS
output_file = 'linxhint_demo.TXT.gz'
write_mode = 'wb'
mit gzip.open(output_file, write_mode) als Ausgabe:
mit io.TextIOWrapper(output, encoding='utf-8') als encode:
kodieren.write('Wir können alles in die Datei schreiben, was wir wollen.\n')
print(output_file,
'enthält', os.stat(Ausgabedatei).st_size, 'Bytes')
os.system('Datei -b --mime '.format(Ausgabedatei))

Folgendes erhalten wir mit diesem Befehl zurück:

In ZIP-Datei schreiben

Wenn Sie sich nun die Ordnerstruktur ansehen, in der Sie dieses Skript ausgeführt haben, sollte es eine neue Datei mit dem Namen geben, den wir in unserem obigen Programm bereitgestellt haben.

Mehrere Zeilen in eine komprimierte Datei schreiben

Wir können auch mehrere Zeilen oder sogar eine beliebige Anzahl von Zeilen in unsere gzip-Datei schreiben, ganz ähnlich wie im vorherigen Beispiel. Um dieses Beispiel anders zu machen, werden wir auch das itertools-Modul verwenden. Schauen wir uns das Beispielprogramm an:

gzip importieren
importieren
Importieren von OS
itertools importieren
output_file = 'linxhint_demo.TXT.gz'
write_mode = 'wb'
mit gzip.open(output_file, write_mode) als Ausgabe:
mit io.TextIOWrapper(output, encoding='utf-8') als enc:
enc.Schreibzeilen (
itertools.repeat('LinuxHint, gleiche Zeile wiederholen!.\n', 10)
)
os.system('gzcat linxhint_demo.TXT.gz')

Sehen wir uns die Ausgabe für diesen Befehl an:

Mehrere Zeilen schreiben

Lesen komprimierter Daten

Wir können auch die komprimierte Datei, die wir im letzten Beispiel erstellt haben, mit dem gzip-Modul mit einem sehr einfachen Aufruf an lesen öffnen Funktion:

gzip importieren
importieren
Importieren von OS
file_name = 'linxhint_demo.TXT.gz'
file_mode = 'rb'
mit gzip.open(file_name, file_mode) als input_file:
mit io.TextIOWrapper(input_file, encoding='utf-8') als dec:
drucken (dez.lesen())

Folgendes erhalten wir mit diesem Befehl zurück:

Lesen einer gzip-Datei

Streams lesen

Aufgrund der Tatsache, dass Textdateien sehr groß sein können, ist es ratsam, diese Dateien in einem Stream zu öffnen, anstatt die gesamte Datei in ein einzelnes Objekt zu laden, das viel Systemspeicher beansprucht und in einigen Fällen sogar den Prozess verursachen kann komplett abstürzen. Schauen wir uns ein Beispielprogramm an, das die angegebene komprimierte Datei in einem Stream liest:

gzip importieren
aus io importieren BytesIO
Binascii importieren
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Zeile x-mal wiederholt.\n' * 8
print('Nicht komprimierte Daten:', len(non_compressed))
print(nicht_komprimiert)
buf = BytesIO()
mit gzip.GzipFile(mode=mode_write, fileobj=buf) als Datei:
Datei.schreiben (nicht komprimiert)
komprimiert = buf.Wert erhalten()
print('Komprimierte Daten:', len(komprimiert))
drucken (binascii.hexlify (komprimiert))
in_buffer = BytesIO (komprimiert)
mit gzip.GzipFile(mode=mode_read, fileobj=in_buffer) als Datei:
read_data = Datei.read(len(non_compressed))
print('\nErneut lesen:', len(read_data))
print(read_data)

Sehen wir uns die Ausgabe für diesen Befehl an:

Gzip-Datei in einem Stream lesen

Obwohl das Programm etwas lang war, haben wir eigentlich nur Python-Module verwendet, die die Datei öffnen und den Inhalt mit einem gepufferten Reader-Objekt an die Konsole streamen.

Fazit

In dieser Lektion haben wir uns angeschaut, wie wir das Python gzip-Modul verwenden können, um Dateien in Python zu komprimieren und zu dekomprimieren. Das größte Feature, das uns diese Bibliothek bietet, ist, dass wir komprimierte Dateien wie normale Dateiobjekte behandeln können.

Lesen Sie hier mehr Python-basierte Beiträge.

Herunterladen und Spielen von Sid Meier's Civilization VI unter Linux and
Einführung in das Spiel Civilization 6 ist eine moderne Version des klassischen Konzepts, das in der Reihe der Age of Empires-Spiele eingeführt wurde....
So installieren und spielen Sie Doom unter Linux
Einführung in Doom Die Doom-Serie entstand in den 90er Jahren nach der Veröffentlichung des ursprünglichen Doom. Es war sofort ein Hit und seitdem hat...
Vulkan für Linux-Benutzer
Mit jeder neuen Grafikkartengeneration stoßen Spieleentwickler an die Grenzen der grafischen Wiedergabetreue und kommen dem Fotorealismus einen Schrit...