Home  >  Article  >  Backend Development  >  Basic introduction to shelve module

Basic introduction to shelve module

零下一度
零下一度Original
2017-07-23 10:04:522560browse

shelve

shelve is a simple data storage solution. It has only one function: open (), this function receives a parameter which is the file name, and then returns a shelf object. You can use it to store things, or simply treat it as a dictionary. When you are finished storing, call the close function to close it.

There is a potential small problem with this, as follows:

[python] view plain copy
>>> import shelve  
>>> s = shelve.open('test.dat')  
>>> s['x'] = ['a', 'b', 'c']  
>>> s['x'].append('d')  
>>> s['x']  
['a', 'b', 'c']

Where does the stored d go? In fact, it is very simple. d does not write back. You save ['a', 'b', 'c'] to x. When you read s['x'] again, s['x'] is just a Copy, and you did not write the copy back, so when you read s['x'] again, it read a copy from the source, so your newly modified content will not appear in the copy. , the solution is, the first one is to use a cached variable, as shown below

[python] view plain copy
>>> temp = s['x']  
>>> temp.append('d')  
>>> s['x'] = temp  
>>> s['x']  
['a', 'b', 'c', 'd']

There is another method in python2.4, which is to assign the value of the writeback parameter of the open method to True. In this case, all the content after you open it will be in the cache, and when you close it, everything will be written to the hard disk at once. This is recommended if the amount of data is not very large.

1. Introduction

In python3, we use json or pickle to persist data. It can be dumped multiple times, but can only be loaded once. Because the previous data has been overwritten by the subsequent dump data. If we want to implement dump and load multiple times, we can use the shelve module. The shelve module can persist all data types supported by pickle.

2. Persistent data

1. Data persistence

import shelve
import datetime

info = {'name': 'bigberg', 'age': 22}
name = ['Apoll', 'Zous', 'Luna']
t = datetime.datetime.now()

with shelve.open('shelve.txt') as f:
    f['name'] = name    # 持久化列表
    f['info'] = info         # 持久化字典 
    f['time'] = t            # 持久化时间类型

After executing the code, 3 files will be generated: shelve.txt.bak, shelve.txt.dat, shelve.txt.dir.

  • #shelve.txt.bak Content

'info', (512, 45)
'name', (0, 42)
'time', (1024, 44)
  • ##shelve.txt.dat 

�]q (X   ApollqX   ZousqX   Lunaqe.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      �}q (X   ageqKX   nameqX   bigbergqu.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   �cdatetime
datetime
q C
�"
2�q�qRq.
  • Contents of shelve.txt.dir

'info', (512, 45)
'name', (0, 42)
'time', (1024, 44)

2. Data reading

We use get to obtain data

import shelve

with shelve.open('shelve.txt') as f:
    n = f.get('name')
    i = f.get('info')
    now = f.get('time')

print(n)
print(i)
print(now)

#输出

['Apoll', 'Zous', 'Luna']
{'age': 22, 'name': 'bigberg'}
2017-07-08 11:07:34.865022

1. The shelve module is a simple key, value A module that persists memory data through files.

2. The shelve module can persist any python data format supported by pickle.

3. Shelve is a package of the pickle module.

4. The shelve module can dump and load multiple times.

The above is the detailed content of Basic introduction to shelve module. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn