9. Kapitel

Werbung
Kapitel 9:
Ein- und Ausgabe
Einführung in die Informatik
Wintersemester 2007/08
Prof. Bernhard Jung
Ein- und Ausgabe: Übersicht
„
Interaktive Ein- und Ausgabe in Python-Interpreter
‰
‰
Eingabe: input(), raw_input()
Ausgabe: print
„
„
auch formatierte Ausgabe (siehe auch Übungen), z.B.
>>> print '%1.3f' % 1.2
1.200
„
Ein- und Ausgabe von / in Dateien
„
Datenbanken
‰
später
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
1
Interaktive Eingabe (Wdh)
„
Eingabe in der Python-Shell
‰
raw_input()
‰
input()
„
„
Rückgabewert ist immer vom Typ String
Typ des Rückgabewerts entsprechend Eingabewert
>>> i = input("Geben Sie eine Zahl ein: ")
Geben Sie eine Zahl ein: 10
>>> print type(i), i + 1
<type 'int'> 11
>>> i = raw_input("Geben Sie eine Zahl ein: ")
Geben Sie eine Zahl ein: 10
>>> print type(i), i + 1
<type 'str'>
Traceback (most recent call last):
File "<pyshell#34>", line 1, in -toplevelprint type(i), i + 1
TypeError: cannot concatenate 'str' and 'int' objects
>>>
Prof. B. Jung
TU Bergakademie Freiberg
Einführung in die Informatik, WS 2007/08
Interaktive Eingabe – Beispiele
Eingabe einer beliebigen Anzahl von Zahlen
def leseWerte():
"""Interaktives Einlesen von Zahlen-Werten.
Abbruch bei Eingabe einer Zahl < 0.
"""
werte = []
zahl = 0 # Dummy-Wert
while (zahl >= 0 ):
zahl = input("Eingabe einer Zahl --> ")
if zahl >= 0:
werte.append(zahl)
return werte
>>> l = leseWerte()
Eingabe einer Zahl -->
Eingabe einer Zahl -->
Eingabe einer Zahl -->
Eingabe einer Zahl -->
Eingabe einer Zahl -->
>>> print l
[1, 1.2, 3, 4]
Prof. B. Jung
1
1.2
3
4
-1
Aber, falls Eingabe keine Zahl: (Behandlung mit
'Exceptions', fortgeschrittenes Thema)
>>> leseWerte()
Eingabe einer ganzen Zahl --> 2
Eingabe einer ganzen Zahl --> zwei
Traceback (most recent call last):
File "<pyshell#17>", line 1, in toplevel-leseWerte()
TU Bergakademie Freiberg
Einführung in die Informatik, WS 2007/08
… NameError: name 'zwei' is not defined
2
Interaktive Eingabe – Beispiele
Textbasiertes Menü (1/2)
„
Auswahl von Optionen in
zeichenorientierte
Benutzerschnittstelle
Was wollen Sie als naechstes tun?
(E)ingabe einer neuen Zahl
(L)iste aller Eingaben
(B)eenden
Ihre Wahl:
def dialog():
zahlen = []
eingabe = ""
while eingabe not in ['B', 'b']:
print "\nWas wollen Sie als naechstes tun?"
print " (E)ingabe einer neuen Zahl"
print " (L)iste aller Eingaben"
print " (B)eenden"
eingabe = raw_input("Ihre Wahl: ")
if eingabe in ['E','e']:
z = int( input("Geben Sie eine ganze Zahl ein: ") )
zahlen.append(z)
elif eingabe in ['L','l']:
print "Eingaben bisher:", zahlen
print "Vielen Dank. Auf
Wiedersehen!"
Prof. B. Jung
TU Bergakademie Freiberg
Einführung in die Informatik, WS 2007/08
Interaktive Eingabe – Beispiele
Textbasiertes Menü (2/2)
Was wollen Sie als naechstes tun?
(E)ingabe einer neuen Zahl
(L)iste aller Eingaben
(B)eenden
Ihre Wahl: E
Geben Sie eine ganze Zahl ein: 4
Was wollen Sie als naechstes tun?
(E)ingabe einer neuen Zahl
(L)iste aller Eingaben
(B)eenden
Ihre Wahl: e
Geben Sie eine ganze Zahl ein: 777
Was wollen Sie als naechstes tun?
(E)ingabe einer neuen Zahl
(L)iste aller Eingaben
(B)eenden
Eingabe entspricht keiner
Ihre Wahl: g#
Option Æ weiter
Was wollen Sie als naechstes tun?
(E)ingabe einer neuen Zahl
(L)iste aller Eingaben
(B)eenden
Ihre Wahl: l
Eingaben bisher: [4, 2, 777]
Was wollen Sie als naechstes tun?
(E)ingabe einer neuen Zahl
(L)iste aller Eingaben
(B)eenden
Ihre Wahl: E
Geben Sie eine ganze Zahl ein: 2.8
Prof. B. Jung
Was wollen Sie als naechstes tun?
(E)ingabe einer neuen Zahl
(L)iste aller Eingaben
(B)eenden
Ihre Wahl: b
Vielen Dank. Auf Wiedersehen!
Eingabe von Float Æ Konvertierung zu Integer,
hier 2in die Informatik, WS 2007/08
Einführung
TU Bergakademie Freiberg
3
Arbeiten mit Dateien
„
Ziel: Verfügbarkeit von Daten auch nach Beendigung eines
Programms
Æ Speichern der Daten in Dateien
„
Prinzipielles Vorgehen beim Arbeiten mit Dateien
1.
2.
3.
Öffnen der Datei
(wiederholtes) Lesen bzw. Schreiben von Daten
Schließen der Datei
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Öffnen und Schließen von Dateien
„
f = open(filename, mode)
‰
Erzeugt ein Objekt f vom Typ file
‰
Mode
„
„
„
„
„
„
„
r – Datei zum Lesen öffnen. Die Datei muss existieren.
w – Datei zum Schreiben öffnen. Existiert eine gleichnamige Datei, wird sie gelöscht.
a – Schreiben am Ende einer Datei. Die Datei muss existieren.
r+ - Lesen und Schreiben. Die Datei muss existieren.
w+ - Lesen und Schreiben. Existiert eine gleichnamige Datei, wird sie gelöscht.
a+ - Lesen und Schreiben am Ende einer Datei. Die Datei muss existieren.
f.close()
‰
Anwendung der Methode close() auf das file-Objekt f
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
4
In Dateien Schreiben
„
Schreiben von Strings
‰
‰
„
f.write(String)
f.writeLines([String1, String2, … ])
Schreiben verschiedener Datentypen mittels print
‰
Ausgabe erscheint in Datei wie bei print im Interpreter
print >> f, data
‰
z.B.
‰
„
„
„
Prof. B. Jung
print >> f, 10
print >> f, "Hallo Welt"
print >> f, "%x" % 15 # Ausgabe als Hexadezimalzahl
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
In Dateien Schreiben – Beispiel (write)
def saveList(filename,list):
f = open(filename, 'w') #
for i in list:
f.write( str(i) )
#
f.write( "\n")
#
f.close()
#
Übergabe des Dateinamen
als Raw-String
open file for writing
write each list element as string
start a new line
close the file
Verzeichnis c:\temp muss existieren
>>> saveList(r'c:\temp\list1.txt', [1,'zwei', 3.0])
>>>
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
5
In Dateien Schreiben – Beispiel (print)
def saveList2(filename,list):
f = open(filename, 'w') # open file for writing
for i in list:
print >> f, i
# print each list element to the file
f.close()
# close the file
Übergabe des Dateinamen
als normaler String
Verzeichnis c:\temp muss existieren
>>> saveList2('c:\\temp\\list2.txt', [1,'zwei', 3.0, (1,2) ])
>>>
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Aus Dateien Lesen
„
Methoden
‰
‰
‰
‰
f.read() – gibt die ganze Datei zurück (als String)
f.read(n) – liest n Zeichen
f.readline() – liest eine Zeile (d.h. bis '\n')
f.readlines() – gibt eine Liste zurück; jedes Element ist eine Zeile
der gelesenen Datei f
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
6
Aus Dateien Lesen - Beispiel
def readList(filename):
f = open(filename, 'r') # open file for reading
lines = f.readlines()
# read all lines
f.close()
return lines
Datei c:\temp\list2.txt muss existieren
>>> readList2(r'c:\temp\list2.txt')
['1\n', 'zwei\n', '3.0\n', '(1, 2)\n']
>>>
Rückgabe: Liste von Strings
Prof. B. Jung
TU Bergakademie Freiberg
Einführung in die Informatik, WS 2007/08
Ein- und Ausgabe mit dem Modul pickle
„
Problem bisher beim Einlesen
‰
‰
read-Funktionen liefern nur Strings
Einlesen anderer Datentypen erfordert explizite Konvertierung
„
„
„
„
>>> i = int('1')
>>> j = int('2\n')
>>> print i, j
1 2
z.B. mittels int(), float()-Funktionen
für komplexe Datentypen (Listen, Mengen, Objekte) noch komplexer
fehleranfällig!
Modul pickle (etwa: Einpökeln):
‰
‰
ermöglicht Speichern und anschließendes Auslesen beliebiger Objekte
ohne explizite Konvertierung
Funktionen
„
„
‰
dump(data, file)
# schreibe Daten data in Datei file
load(file) # lädt Daten aus Datei; Rückgabe als ein Objekt
Mögl. Nachteile
„
„
Prof. B. Jung
gespeicherte Dateiinhalte nicht mehr unbedingt für Menschen verständlich
funktioniert nur bei Schreiben und Lesen von Python aus (Dateien für andere
Programmiersprachen nicht direkt interpretierbar)
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
7
Modul pickle - Beispiel
def saveWithPickle(filename, obj):
f = open(filename, 'w') # open file for writing
from pickle import dump
dump(obj, f)
f.close()
def readWithPickle(filename):
f = open(filename, 'r') # open file for reading
from pickle import load
obj = load(f)
f.close()
return obj
>>> saveWithPickle(r'c:\temp\list3.txt', ['eins', 2, 3.0, {"otto":1}] )
>>> readWithPickle(r'c:\temp\list3.txt')
['eins', 2, 3.0, {'otto': 1}]
>>>
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
8
Herunterladen