Seite 1 von 1

for schleife

Verfasst: Montag 11. März 2013, 17:50
von Joe-Waschl
hallo zusammen,
bräuchte bitte eure hilfe :oops:
habe leider ein kleines problem und finde den fehler nicht.
Ich habe mir ein programm geschrieben das den Namen und das dazugehörige Geburtsdatum
mit pickle speichert, doch beim anzeigen aller daten in der datei bekomme ich nur die erste zeile
dargestellt bzw die erste zeile senkrecht. :roll:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: UTF-8 -*-

'''
Created on 12.11.2012

@author: user1
'''

import sys
import pickle


def suchen():
    eingabe = raw_input('Bitte Namen oder Geburtsdatum eingeben( NAMEN TT.MM.JJ): ')
    with open('geb_liste3.pkl', 'r') as datei:
        datei2 = pickle.load(datei)
        if eingabe in datei2:
            print eingabe, 'ist vorhanden'
        else:
            print 'nicht vorhanden'

def beenden():
    print 'beendet'
    sys.exit()

def alle_anzeigen():
    with open('geb_liste3.pkl', 'r') as datei:
        datei2 = pickle.load(datei)
        for zeile in datei2:
            print zeile
            
def hinzufuegen():
    eingabe = raw_input('Namen und Geburtsdatum eingeben(NAMEN TT.MM.JJ): ')
    with open('geb_liste3.pkl', 'a') as datei:
        pickle.dump(eingabe, datei)
        
    
menu = [
        ['Beenden', beenden],
        ['Alle anzeigen', alle_anzeigen],
        ['Hinzufügen', hinzufuegen],
        ['Suchen', suchen]
        ]

def handle_menu(menu):
    while True:
        for index, item in enumerate(menu, 0):
            print '%s %s' %(index, item[0])
        choice = int(raw_input('\nBitte zahl eingeben: '))
        if choice < len(menu):
            menu[choice][1]()
        else: 
            print 'eingabe nicht erkannt'
            
if __name__ == '__main__':
    handle_menu(menu)

Code: Alles auswählen

0 Beenden
1 Alle anzeigen
2 Hinzufügen
3 Suchen

Bitte zahl eingeben: 1
t
e
s
t
 
1
1
.
1
1
.
1
1
gruß Joe

Re: for schleife

Verfasst: Montag 11. März 2013, 17:57
von EyDu
Für jeden dump-Aufruf musst du auch einen load-Aufruf machen.

Re: for schleife

Verfasst: Montag 11. März 2013, 17:58
von BlackJack
@Joe-Waschl: So funktioniert das Pickle nicht. Beim Laden wird die Struktur geladen, die am Anfang in der Datei steht. Und das ist *eine* Zeichenkette. Was danach kommt ist Pickle egal. Du musst *alle* Daten speichern. Das heisst hinzufügen ist nicht anhängen an eine Datei, sondern laden der Daten, dort den neuen Eintrag hinzufügen, und dann alles wieder Speichern. Also zum Beispiel eine Liste mit Zeichenketten. Da kommt beim Laden dann auch wieder eine Liste mit Zeichenketten heraus.

Edit: Was EyDu sagt, könntest Du auch machen, aber mit dem Ansatz bekommst Du spätestens Probleme wenn Du Datensätze löschen möchtest.

Re: for schleife

Verfasst: Montag 11. März 2013, 18:10
von Joe-Waschl
ahh ok, dann werde ich alles in eine liste packen

danke für die schnelle antwort :)