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.

Installieren Sie das neueste OpenRA-Strategiespiel auf Ubuntu Linux
OpenRA ist eine Libre/Free Real Time Strategy Game Engine, die die frühen Westwood-Spiele wie den Klassiker Command & Conquer: Red Alert Red nachbilde...
Installieren Sie den neuesten Dolphin Emulator für Gamecube & Wii unter Linux
Mit dem Dolphin Emulator können Sie Ihre ausgewählten Gamecube- und Wii-Spiele auf Linux-Personalcomputern (PC) spielen. Als frei verfügbarer Open-So...
So verwenden Sie die GameConqueror-Cheat-Engine unter Linux
Der Artikel enthält eine Anleitung zur Verwendung der GameConqueror-Cheat-Engine unter Linux. Viele Benutzer, die Spiele unter Windows spielen, verwen...