Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Regalmodul

Python-Regalmodul

巴扎黑
巴扎黑Original
2016-12-07 11:16:221385Durchsuche

shelve
shelve ist eine einfache Datenspeicherlösung. Sie verfügt über nur eine Funktion, nämlich open(). Diese Funktion empfängt einen Parameter, der den Dateinamen darstellt, und gibt dann ein Shelf-Objekt zurück , einfach Sie können es einfach wie ein Wörterbuch behandeln. Wenn Sie mit dem Speichern fertig sind, rufen Sie die Schließfunktion auf, um es zu schließen.
Dies hat möglicherweise ein kleines Problem wie folgt:
[python] view plaincopy
>> ;> import shelve
>>> s = shelve.open('test.dat')
>>> , 'c']
>>> s['x'].append('d')
>>> 'b', 'c']
Wo ist das gespeicherte d geblieben? Tatsächlich ist es sehr einfach. Sie speichern ['a', 'b', 'c'] in x nur eine Kopie, und Sie haben die Kopie nicht zurückgeschrieben. Wenn Sie also s['x'] erneut lesen, wird eine Kopie aus der Quelle gelesen, sodass Ihr neu geänderter Inhalt nicht in der Kopie erscheint. Die Lösung lautet: Die erste besteht darin, eine zwischengespeicherte Variable zu verwenden, wie unten gezeigt
[python] view plaincopy
>>> temp = s['x']
>> ;> ('d')
>>> s['x'] = temp
>>> c', 'd']
Es gibt eine andere Methode in Python2.4, die darin besteht, den Wert des Writeback-Parameters der Open-Methode auf True zuzuweisen. In diesem Fall wird der gesamte Inhalt nach dem Öffnen angezeigt im Cache, und wenn Sie ihn schließen, wird alles auf einmal auf die Festplatte geschrieben. Dies empfiehlt sich, wenn die Datenmenge nicht sehr groß ist.

Das Folgende ist der Code für eine einfache Datenbank basierend auf Shelve
[python] view plaincopy
#database.py
import sys, shelve

def store_person(db ):
"""
Benutzer nach Daten abfragen und im Regalobjekt speichern
"""
pid = raw_input('Eindeutige ID-Nummer eingeben: ')
person = {}
person['name'] = raw_input('Namen eingeben: ')
person['age'] = raw_input('Alter eingeben: ')
person['phone'] = raw_input('Enter Telefonnummer: ')
db[pid] = Person

def lookup_person(db):
"""
Benutzer nach ID und gewünschtem Feld abfragen und die entsprechenden Daten von das Regalobjekt
"""
pid = raw_input('ID-Nummer eingeben: ')
field = raw_input('Was möchten Sie wissen? (Name, Alter, Telefon) ')
field = field.strip().lower()
print field.capitalize() + ':',
db[pid][field]

def print_help():
print 'Die verfügbaren Commons sind: '
print 'store: Speichert Informationen über eine Person'
print 'lookup: Sucht eine Person anhand der ID-Nummer nach'
print 'quit: Änderungen speichern und beenden'
print '? rint this message'

def enter_command():
cmd = raw_input('Enter command (? for help): ')
cmd = cmd.strip().lower ()
return cmd

def main():
Database = shelve.open('database.dat')
try:
while True:
cmd = enter_command ()
if cmd == 'store':
store_person(database)
            elif cmd == 'lookup':  
                lookup_person(database)  
            elif cmd == '?':  
                print_help()  
        cmd == 'quit':  
                return   
schließlich:  
        Database.close()  
if __name__ == '__main__': main() 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn