Python Data Persistence – shelve Module
Serialization and persistence affected by functionality in this module depend on the pickle storage format, although it is meant to deal with a dictionary-like object only and not with other Python objects. The shelve module defines an all-important open( ) function that returns the ‘shelf object representing the underlying disk file in which the ‘pickled’ dictionary object is persistently stored.
Example
>>> import shelve >>> obj =shelve.open('shelvetest1)
In addition to the filename, the open( ) function has two more optional parameters. One is ‘flag’ which is by default set to ‘c’ indicating that the file has read/write access. Other accepted values for flag parameters are ‘w’ (write-only), ‘r’ (read-only), and ‘n’ (new with reading/write access). The second optional parameter is ‘writeback’ whose default value is False. If this parameter is set to True, any modification made to the shelf object will be cached in the memory and will only be written to file on calling sync () or close ( ) methods, which might result in the process becoming slow.
Once a shelf object is declared, you can store key-value pair data to it. However, the shelf object accepts only a string as the key. Value can be any valid Python object.
Example
>>> obj ['name'] = 'Virat Kohli' >>> obj ['age']=29 >>> obj ['teams']=['India', 'IndiaU19', 'RCB', 'Delhi'] >>> obj.close( )
In the current working directory, a file named ‘shelveset.dir’ will store the above data. Since the shelf is a dictionary-like object, it can invoke familiar methods of built-in diet class. Using the get () method, one can fetch a value associated with a certain key. Similarly, the update () method can be used to add/modify k-v pairs in shelf objects.
Example
>>> obj.get('name') 'Virat Kohli' >>> dct = { '100s' :64, '50s' :69} >>> obj.update(dct) >>> diet(obj) {'name': 'Virat Kohli', 'age': 29, 'teams': ['India', 'IndiaU19', 'RCB', 'Delhi'], '100s': 64,' 50s' : 69}
The shelf object also returns views of keys, values, and items,same as the built-in dictionary object.
Example
>>> keys=list(obj.keys()) >>> keys ['name', 'age', 'teams', '100s', '50s'] >>> values=list(obj.values() ) >>> values ['Virat Kohli', 29, ['India' , 'IndiaU19' 'RCB', 'Delhi’], 64, 69] >>> items=list(obj.items()) >>> items [('name', 'Virat Kohli'), (' age 1, 29), ( teams', ['India', ’IndiaU19', 'RCB', 'Delhi']), ' 100s ' , 64), ( ' 50s 1 , 69)]