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.