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

Eine Adressliste sichern

Zielsetzung

Wenn man E-Mail-Adressen mit einer Liste verwaltet, dann erfolgt die Datenhaltung nur solange das Programmiersystem aktiv ist. Für eine längerfristige Datenhaltung müssen die Daten in einer externen Datei gespeichert werden. Um beides nutzen zu können - längerfristige Sicherung der Daten in einer Datei und flexible Datenhaltung und -verarbeitung mit Listen - benötigt man Funktionen, die das Speichern und Laden von Daten sowie das Umwandeln von Listen und Texten ermöglichen. Ziel ist es, die hierzu erforderlichen Bausteine zu erkunden und zu nutzen.

Bausteine benutzen

Funktionen zur Listenverarbeitung muss man nicht immer selbst konzipieren und definieren. Oft kann man auf bereits existierende Funktionsdefinitionen zurückgreifen. Wenn die Funktionsdefinitionen hinreichend dokumentiert sind, dann kann man die Funktionen als fertigen Baustein benutzen.

Der folgende Python-Quelltext liefert die zur externen Datenhaltung benötigten Bausteine.

def textAusStringListe(liste):

    # erzeugt aus einer Liste mit Strings einen String,
    # der alle Strings der Liste enthält, getrennt durch
    # das Zeilenumbruchzeichen \n.

    """
    >>> textAusStringListe(['Tamara', 'Peter', 'Bello'])
    'Tamara\nPeter\nBello'
    """
    
    text = ''
    if len(liste) > 0:
        text = text + liste[0]
        for element in liste[1:]:
            text = text + '\n' + element
    return text

def stringListeAusText(text):

    # erzeugt aus einem String mit Zeilenumbruchzeichen
    # eine Liste mit Strings zu den einzelnen Zeilen

    """
    >>> stringListeAusText('Tamara\nPeter\nBello')
    ['Tamara', 'Peter', 'Bello']
    >>> stringListeAusText('Text\nmit\n\nmehreren\nZeilen')
    ['Text', 'mit', '', 'mehreren', 'Zeilen']
    """

    liste = text.split('\n')
    return liste

def textAusDatei(dateiname):

    # lädt einen Text aus einer Datei und gibt sie als
    # Zeichenkette zurück
    # beachte: setzt die Codierung iso-8859-1 voraus
    
    datei = open(dateiname, 'r', encoding='iso-8859-1')
    text = datei.read()
    datei.close()
    return text

def textInDateiSpeichern(dateiname, text):

    # speichert eine Zeichenkette in einer Datei
    # beachte: benutzt die Codierung iso-8859-1
    
    datei = open(dateiname, 'w', encoding='iso-8859-1')
    datei.write(text)
    datei.close()

Verwenden kann man diese Bausteine z.B. so:

from listenoperationen_zum_laden_und_speichern import *

# Test

listeAdressen = [
    'amueller@gmx.de',
    'carla2@hotmail.org',
    'herbert.fluhr@web.de',
    'petra@dahm.de',
    'ewen@t-online.de',
    't_schmidt@web.de',
    'nicole.weber@gmx.de'
    ]

text = textAusStringListe(listeAdressen)
textInDateiSpeichern('emailadressen.txt', text)

Aufgabe 1

(a) Speichere die Bausteine zum Laden und Speichern in einer Datei mit dem Dateinamen listenoperationen_zum_laden_und_speichern.py ab. Führe das Python-Programm mit den Funktionsdefinitionen einmal aus, damit Python die Funktionsdefinitionen "übernimmt". Führe anschließend das Testprogramm aus. Beachte, dass das Testprogramm im selben Verzeichnis gespeicht wird wie das Programm mit den Funktionsdefinitionen.

(b) In einer Textdatei befinden sich E-Mail-Adressen (jede Adresse in einer eigenen Zeile). Mit geeigneten Bausteinen soll diese E-Mail-Adressen um weitere Adressen ergänzt werden. Das Resultat soll wieder in derselben Textdatei abgespeichert werden.

X

Fehler melden

X

Suche