Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Experimente zum Speichern und Laden

Verarbeitung von Texten

Zu verarbeitende Texte wurden bisher immer direkt vorgegeben - so wie im folgenden Programm zum Verschlüsseln nach der Verschiebemethode.

def verschluesselterText(text, schluessel):

    """
    >>> verschluesselterText('HALLO', 4)
    'LEPPS'
    >>> verschluesselterText('ABC', 0)
    'ABC'
    >>> verschluesselterText('XYZ', 2)
    'ZAB'
    >>> verschluesselterText('ABC', 26)
    'ABC'
    """

    geheimtext = ''
    for zeichen in text:
        zahl = ord(zeichen)
        neuezahl = zahl + schluessel
        if neuezahl > ord('Z'):
            neuezahl = neuezahl - 26
        neuesZeichen = chr(neuezahl)
        geheimtext = geheimtext + neuesZeichen
    return geheimtext

def vereinfachterText(text):

    """
    >>> vereinfachterText('Hallo')
    'HALLO'
    >>> vereinfachterText('Süß oder sauer?')
    'SUESSODERSAUER'
    """
    
    textNeu = ''
    for zeichen in text:
        if ord(zeichen) >= ord('A') and ord(zeichen) <= ord('Z'):
            # zeichen ist ein Großbuchstabe
            textNeu = textNeu + zeichen
        elif ord(zeichen) >= ord('a') and ord(zeichen) <= ord('z'):
            # zeichen ist ein Kleinbuchstabe
            neuesZeichen = chr(ord(zeichen)-32)
            textNeu = textNeu + neuesZeichen
        elif zeichen == 'Ä' or zeichen == 'ä':
            textNeu = textNeu + 'AE'
        elif zeichen == 'Ö' or zeichen == 'ö':
            textNeu = textNeu + 'OE'
        elif zeichen == 'Ü' or zeichen == 'ü':
            textNeu = textNeu + 'UE'
        elif zeichen == 'ß':
            textNeu = textNeu + 'SS'
    return textNeu


# Testfälle überprüfen
if __name__ == "__main__":
    from doctest import testmod
    testmod()

# Funktionen benutzen
aktuellerText = """Gaius Iulius Caesar war ein römischer Staatsmann, Feldherr und Autor,
der maßgeblich zum Ende der Römischen Republik beitrug und dadurch an
ihrer späteren Umwandlung in ein Kaiserreich beteiligt war."""
vereinfachterAktuellerText = vereinfachterText(aktuellerText)
verschluesselterAktuellerText = verschluesselterText(vereinfachterAktuellerText, 3)
print(aktuellerText)
print()
print(vereinfachterAktuellerText)
print()
print(verschluesselterAktuellerText)

Aufgabe 1

Teste das Programm, auch mit eigenen Texten.

Textdateien verwenden

Gerade bei längeren Texten ist es günstig, wenn man sie nicht in ein Programm reinkopieren muss, sondern wenn man sie aus Textdateien laden und auch wieder in Textdateien speichern kann. Wie das geht, wird im folgenden Programm gezeigt.

def verschluesselterText(text, schluessel):

    """
    >>> verschluesselterText('HALLO', 4)
    'LEPPS'
    >>> verschluesselterText('ABC', 0)
    'ABC'
    >>> verschluesselterText('XYZ', 2)
    'ZAB'
    >>> verschluesselterText('ABC', 26)
    'ABC'
    """

    geheimtext = ''
    for zeichen in text:
        zahl = ord(zeichen)
        neuezahl = zahl + schluessel
        if neuezahl > ord('Z'):
            neuezahl = neuezahl - 26
        neuesZeichen = chr(neuezahl)
        geheimtext = geheimtext + neuesZeichen
    return geheimtext

def vereinfachterText(text):

    """
    >>> vereinfachterText('Hallo')
    'HALLO'
    >>> vereinfachterText('Süß oder sauer?')
    'SUESSODERSAUER'
    """
    
    textNeu = ''
    for zeichen in text:
        if ord(zeichen) >= ord('A') and ord(zeichen) <= ord('Z'):
            # zeichen ist ein Großbuchstabe
            textNeu = textNeu + zeichen
        elif ord(zeichen) >= ord('a') and ord(zeichen) <= ord('z'):
            # zeichen ist ein Kleinbuchstabe
            neuesZeichen = chr(ord(zeichen)-32)
            textNeu = textNeu + neuesZeichen
        elif zeichen == 'Ä' or zeichen == 'ä':
            textNeu = textNeu + 'AE'
        elif zeichen == 'Ö' or zeichen == 'ö':
            textNeu = textNeu + 'OE'
        elif zeichen == 'Ü' or zeichen == 'ü':
            textNeu = textNeu + 'UE'
        elif zeichen == 'ß':
            textNeu = textNeu + 'SS'
    return textNeu

def geladenerText(dateiname):
    datei = open(dateiname, 'r', encoding='iso-8859-1')
    text = datei.read()
    datei.close()
    return text

def textSpeichern(dateiname, text):
    datei = open(dateiname, 'w', encoding='iso-8859-1')
    datei.write(text)
    datei.close()

# Testfälle überprüfen
if __name__ == "__main__":
    from doctest import testmod
    testmod()

# Funktionen benutzen
aktuellerText = geladenerText('text_wikipedia_caesar.txt')
vereinfachterAktuellerText = vereinfachterText(aktuellerText)
verschluesselterAktuellerText = verschluesselterText(vereinfachterAktuellerText, 3)
textSpeichern('text_wikipedia_caesar_verschluesselt.txt', verschluesselterAktuellerText)

Aufgabe 2

(a) Zum Testen benötigt man die Datei text_wikipedia_caesar.txt. Speichere diese Datei im selben Verzeichnis wie das Python-Programm. Wo befindet sich der verschlüsselte Text? Überprüfe das Ergebnis.

(b) In den oben gezeigten Funktionen zum Laden und Speichern wird die Codierangabe encoding='iso-8859-1' benutzt. Teste, was sich beim Speichern einer Textdatei (mit Umlauten) ändert, wenn man die Codierangabe encoding='utf-8' benutzt. Am besten, du schaust dir die gespeicherte Datei mit einem Hex-Editor an. Probiere auch aus, was passiert, wenn die Codierangaben beim Laden und Speichern nicht zusammenpassen. Probiere ebenfalls aus, was passiert, wenn man die Codierangabe ganz weglässt.

(c) Wenn der zu verarbeitende Text nicht im selben Verzeichnis wie das Python-Programm liegt, muss man eine Pfadangabe ergänzen. In der Windows-Welt sieht eine Pfadangabe z.B. so aus:

aktuellerText = geladenerText('D:\MeineDaten\Python-Programme\laden_und_speichern\text_wikipedia_caesar.txt')

In der Unix-Welt muss man das Slash-Symbol statt eines Backslash benutzen:

aktuellerText = geladenerText('/MeineDaten/Python-Programme/laden_und_speichern/text_wikipedia_caesar.txt')

Probiere das selbst mit passenden Pfadangaben aus.

X

Fehler melden

X

Suche