Python:shelve資料解析
阿新 • • 發佈:2018-12-20
#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCharm @file: shelve資料解析.py @time: 2018/11/8 19:01 """ """ 一、簡要介紹: Shelve是物件持久化儲存方法,將物件儲存到檔案裡面,預設的資料儲存檔案是二進位制的。可以作為一個簡單 的資料儲存方案。 二、用法: 使用時,只需要使用open函式獲取一個Shelve物件,然後對資料進行增刪改查操作,最後呼叫close函式將資料 寫入檔案。 shelve.open(filename, flag=’c’, protocol=None, writeback=False):建立或開啟一個shelve物件。 shelve預設開啟方式支援同時讀寫操作。 1、filename是關聯的檔案路徑。 2、可選引數flag,預設為‘c’,如果資料檔案不存在,就建立,允許讀寫;可以是: ‘r’: 只讀; ’w’: 可讀寫; ‘n’: 每次呼叫open()都重新建立一個空的檔案,可讀寫。 3、protocol:是序列化模式,預設值為None。 4、writeback:預設為False。當設定為True以後,shelf將會將所有從DB中讀取的物件存放到一個記憶體緩 存。當我們close()關閉的Shelve的時候,快取中所有的物件會被重新寫入DB。 writeback方式有優點也有缺點。優點是減少了我們出錯的概率,並且讓物件的持久化對使用者更加的透 明瞭;但這種方式並不是所有的情況下都需要,首先,使用writeback以後,Shelve在open()的時候會 增加額外的記憶體消耗,並且當DB在close()的時候會將快取中的每一個物件都寫入到DB,這也會帶來額 外的等待時間。因為shelve沒有辦法知道快取中哪些物件修改了,哪些物件沒有修改,因此所有的物件 都會被寫入。 """ import shelve with shelve.open('shelve.txt') as db: db['person1'] = {"name":"cxj","age":18,"hobby":["money","power","girl"]} db['person2'] = {"name": "caoxinjian", "age": 28, "hobby": ["money", "power", "girl"]} with shelve.open('shelve.txt') as db: del db['person1'] db['person3'] = {"name": "Tom", "age": 28, "hobby": ["money", "power", "girl"]} print(db['person2']) #列印{'name': 'caoxinjian', 'age': 28, 'hobby': ['money', 'power', 'girl']} print(type(db)) #列印<class 'shelve.DbfilenameShelf'> print(dict(db)) #列印{'person2': ..., 'person3': {'name': 'Tom', 'age': 28, 'hobby': ['money', 'power', 'girl']}}