dbm
dbm 和 dict 很像,都是用 key-value pair。import dbm # c 表示有則用,沒有則新增 # 在目前工作目錄產生 foods.bak、foods.dat 與 foods.dir 三個檔案 db = dbm.open('foods', 'c') # 新增一筆資料 db['apple'] = '蘋果' # insert # value 為 bytes 物件,要 decode 成字串 print(db['apple']) # b'\xe8\x98\x8b\xe6\x9e\x9c',bytes 物件 print(db['apple'].decode('utf-8')) # 蘋果 # 用已存在的 key 表示更新 db['apple'] = '小蘋果' # update # 用完要關 db.close()dbm 的 key 與 value 都必須是字串或是 bytes 物件。
import dbm db = dbm.open('foods', 'c') db['banana'] = '香蕉' db['durian'] = '榴槤' # db[86] = '芭樂' # keys must be bytes or strings # db['basket'] = [ 'Pear', 'Tomato'] # values must be bytes or strings db.close()dbm 沒有 keys() 與 items(),但可以用 for-in,只是透過 for-in 拿到的 key 與 value 都是 bytes 物件。
import dbm db = dbm.open('foods', 'c') for key in db: print('%s > %s' % (key.decode('utf-8'), db[key].decode('utf-8'))) # apple > 小蘋果 # banana > 香蕉 # durian > 榴槤 db.close()
pickle
如果 value 只能是字串,那 dbm 就用處不大了,但可以透過另一個套件 pickle,將任意型別「醃漬」成 bytes 物件。import dbm import pickle db = dbm.open('foods', 'c') # dumps 表示 dump 成 string db['basket'] = pickle.dumps([ 'Pear', 'Tomato']) db.close() db = dbm.open('foods', 'c') print(db['basket']) # b'\x80\x03]q\... # print(db['basket'].decode('utf-8')) # UnicodeDecodeError # loads 表示 load string print(pickle.loads(db['basket'])) # ['Pear', 'Tomato'] db.close()從 pickle 還原的物件,已經不是原來那個物件(reference),是一個複製品。
import pickle t1 = [ 'Pear', 'Tomato'] b = pickle.dumps(t1) t2 = pickle.loads(b) print(t1) # ['Pear', 'Tomato'] print(t2) # ['Pear', 'Tomato'] print(t1 == t2) # True print(t1 is t2) # False---
---
---
沒有留言:
張貼留言