Python - Datenkompression

Hallo dort, zukünftige Python-Zauberer! Heute tauchen wir in die faszinierende Welt der Datenkompression ein. Als euer freundlicher Nachbar und Computerlehrer freue ich mich, euch auf dieser Reise zu führen, auch wenn ihr noch nie eine einzige Codezeile geschrieben habt. Keine Sorge; wir beginnen mit den allergrößten Grundlagen und arbeiten uns nach oben vor. Also packt eure virtuellen Zauberstäbe (Tastaturen) und lasst uns einige Datenzauber verursachen!

Python - Data Compression

Einführung in die Datenkompression

Was ist Datenkompression?

Stellt euch vor, ihr möchtet alle eure Kleidung in einen Koffer für den Urlaub packen. Datenkompression ist wie diese Kleidung wirklich sauber zusammenzufalten, damit ihr mehr in den gleichen Raum packen könnt. In der digitalen Welt geht es darum, Dateien kleiner zu machen, ohne wichtige Informationen zu verlieren.

Warum ist Datenkompression wichtig?

  1. Speicherplatz sparen
  2. Übertragungszeit reduzieren
  3. Bandbreiteverbrauch senken
  4. Systemleistung verbessern

Jetzt, da wir wissen, warum sie wichtig ist, legen wir die Ärmel hoch und gehen zur Sache!

Grundlegende Zeichenkettenkompression

Beginnen wir mit einem einfachen Beispiel zur Kompression einer Zeichenkette. Wir verwenden eine Technik namens Laufzeitkodierung.

def komprimiere_zeichenkette(s):
komprimiert = ""
anzahl = 1
for i in range(1, len(s)):
if s[i] == s[i-1]:
anzahl += 1
else:
komprimiert += s[i-1] + str(anzahl)
anzahl = 1
komprimiert += s[-1] + str(anzahl)
return komprimiert

# Probieren wir es aus
original = "aaabbbccccddeeee"
komprimiert = komprimiere_zeichenkette(original)
print(f"Original: {original}")
print(f"Komprimiert: {komprimiert}")

Wenn ihr diesen Code ausführt, seht ihr:

Original: aaabbbccccddeeee
Komprimiert: a3b3c4d2e4

Was passiert hier? Wir zählen aufeinanderfolgende Zeichen und ersetzen sie durch das Zeichen gefolgt von der Anzahl. Cool, nicht wahr?

Dateikompression mit zlib

Jetzt steigern wir uns und komprimieren tatsächliche Dateien mit dem zlib-Modul. Keine Sorge, wenn ihr noch nicht wisst, was ein Modul ist – denkt daran, es als eine Werkzeugkiste mit vorgeschriebenen Code zu betrachten, den wir verwenden können.

import zlib

def komprimiere_datei(eingabedatei, ausgabedatei):
mit open(eingabedatei, 'rb') as datei_ein:
daten = datei_ein.read()

komprimierte_daten = zlib.compress(daten, level=9)

mit open(ausgabedatei, 'wb') as datei_aus:
datei_aus.write(komprimierte_daten)

print(f"Originalgröße: {len(daten)} Bytes")
print(f"Komprimierte Größe: {len(komprimierte_daten)} Bytes")
print(f"Kompressionsverhältnis: {len(komprimierte_daten) / len(daten):.2%}")

# Komprimieren wir eine Datei
komprimiere_datei('beispiel.txt', 'beispiel.txt.gz')

Dieses Skript liest eine Datei, komprimiert ihren Inhalt und speichert die komprimierten Daten in einer neuen Datei. Der Komprimierungsgrad (9) ist der höchste, was bedeutet, maximale Kompression.

Dekompression: Eure Daten zurückbringen

Natürlich ist komprimierte Daten nicht viel nutzt, wenn wir sie nicht dekomprimieren können. Schreiben wir also eine Funktion, die genau das tut:

def dekomprimiere_datei(eingabedatei, ausgabedatei):
mit open(eingabedatei, 'rb') as datei_ein:
komprimierte_daten = datei_ein.read()

dekomprimierte_daten = zlib.decompress(komprimierte_daten)

mit open(ausgabedatei, 'wb') as datei_aus:
datei_aus.write(dekomprimierte_daten)

print(f"Dekomprimierte Größe: {len(dekomprimierte_daten)} Bytes")

# Dekomprimieren wir unsere Datei
dekomprimiere_datei('beispiel.txt.gz', 'beispiel_dekomprimiert.txt')

Diese Funktion tut das Gegenteil unserer Komprimierungsfunktion. Sie liest die komprimierte Datei, dekomprimiert die Daten und schreibt sie in eine neue Datei.

Vergleich von Komprimierungsmethoden

Jetzt, da wir einige Komprimierungstechniken gesehen haben, vergleichen wir sie. Wir verwenden eine Tabelle, um die Unterschiede leicht zu sehen:

Methode Vorteile Nachteile Am Besten Verwendet Für
Laufzeitkodierung Einfach zu implementieren Nur effektiv für wiederholte Zeichen Bitmap-Bilder, einfache Muster
zlib Hoher Kompressionsgrad, breit unterstützt langsamer als einfachere Methoden Allgemeine Zweckkompression, Netzwerkprotokolle

Fortgeschrittene Thema: Bildkompression

Für die Abenteuerlustigen unter euch, lassen uns einen kurzen Blick auf die Bildkompression mit der Pillow-Bibliothek werfen. Keine Sorge, wenn das komplext erscheint – es ist nur, um euch einen Vorgeschmack auf das Mögliche zu geben!

from PIL import Image

def komprimiere_bild(eingabedatei, ausgabedatei, qualität):
mit Image.open(eingabedatei) as img:
img.save(ausgabedatei, optimize=True, quality=qualität)

# Komprimieren wir ein Bild
komprimiere_bild('beispiel.jpg', 'komprimiertes_beispiel.jpg', 50)

Dieses Skript öffnet ein Bild, komprimiert es durch Reduzierung seiner Qualität und speichert es als neue Datei. Der qualität-Parameter reicht von 1 (schlechtest) bis 95 (best).

Schlussfolgerung

Herzlichen Glückwunsch! Ihr habt gerade eure ersten Schritte in die Welt der Datenkompression mit Python gemacht. Wir haben grundlegende Zeichenkettenkompression, Dateikompression und -dekompression sowie sogar Bildkompression abgedeckt. Denkt daran, Kompression ist alles darum zu finden, wie man Muster effizienter darstellt.

Während ihr weiterhin eure Python-Reise fortsetzt, werdet ihr noch mächtigere Komprimierungstechniken entdecken. Wer weiß? Vielleicht werdet ihr die nächste Durchbruchs in der Datenkompression erfinden! Bis dahin, lasst weiterhin coden, bleibt neugierig und vergesst nicht, Spaß dabei zu haben.

Credits: Image by storyset