1. 程式人生 > >python常用模組——json、pickle、shelve

python常用模組——json、pickle、shelve

常用模組 json  pickle shelve

json模組和pickle模組很像,方法都一樣;json在js、python、java等等中通用,而pickle是python裡的。

一、 json模組

  json模組只需要掌握 dumps和loads即可;另外兩個用到時再補充吧;

1. dump()

格式如下:

  • dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
    

fp為檔案控制代碼;和dumps類似,區別舉例見dumps;

2. load()

格式如下:

  • load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
    

fp為檔案控制代碼;和loads類似,區別舉例見loads;

3. dumps()

格式如下:

  • dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
    

將字典、列表等轉換為json格式; 檔案中只能寫入str格式,故dict必須轉換為json或者強制轉換str;

例1和例2等效;一個用的是dumps,一個是dump;

  • 例1:
        import json
        dict = {'name':'superman','job':'IT'}
        f = open('json_txt','w')
    
        json_data = json.dumps(dict)
        f.write(json_data)
    
        f.close()
    
    例2:
        import json
        dict = {'name':'superman','job':'IT'}
        f = open('json_txt','w')
    
        json.dump(dict,f)
    
        f.close()
    

4. loads()

格式如下:

  • loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
    

將json等字串格式轉換為字典等原有的格式; 從檔案中讀取內容為 str格式,並不是字典等物件型別;需要轉換回去才可以當做物件處理;

例1和例2等效;一個用的是loads,一個是load;

  • 例1:
        import json
        f = open('json_txt','r')
        dict = json.loads(f.read())
        print(dict['name'])         # 輸出 superman
    
    例2:
        import json
        f = open('json_txt','r')
        dict = json.load(f)
        print(dict['name'])         # 輸出 superman
    

二、 pickle模組

  pickle模組的方法和json一樣。唯一的區別是轉換為pickle後,需要二進位制模式才可以寫進檔案;pickle支援更多的格式(比如類);

1. dump()

格式如下:

  • dump(obj, file, protocol=None, *, fix_imports=True)
    
    和json模組的dump一樣;

2. load()

格式如下:

  • load(file, *, fix_imports=True, encoding='ASCII', errors='strict')
    

和json模組的load一樣;

3. dumps()

格式如下:

  • dumps(obj, protocol=None, *, fix_imports=True)
    

將字典、列表等轉換為pickle特有格式;

例如:

  • import pickle
    dict = {'name':'superman','job':'IT'}
    pickle_data = pickle.dumps(dict)
    f = open('pickle_txt','wb')         # 注意,這裡要用二進位制模式寫
    f.write(pickle_data)
    f.close()
    

4. loads()

格式如下:

  • loads(data, *, fix_imports=True, encoding='ASCII', errors='strict')
    

將pickle格式轉換為字典等原有的格式; 從檔案中讀取內容為pickle處理過的一種str格式,並不是字典等物件型別;需要轉換回去才可以當做物件處理;

例如:

  • import pickle
    f = open('pickle_txt','rb')         # 注意,要二進位制模式讀
    dict = pickle.loads(f.read())
    print(dict['name'])         # 輸出 superman
    

三、shelve 模組

  shelve模組只有一個方法open;使用shelve模組儲存字典更方便;會生成三個檔案儲存,.bak/.dat/.dir三個格式的檔案;

  如下例中,實際是一個巢狀字典: f = {'info':'{'name':'wjz','job':'IT'}'};

open()

格式如下:

  • open(filename, flag='c', protocol=None, writeback=False)
    

例1:儲存字典

  • import shelve
    f=shelve.open('shelve_txt')             # 生成 shelve_txt.bak  shelve_txt.dat  shelve_txt.dir三個檔案;
    f['info']={'name':'wjz','job':'IT'}     # 將字典info存入shelve_txt;
    

例2:從shelve儲存的檔案中取字典

  • import shelve
    f=shelve.open('shelve_txt')
    print(f['info'])                        # 等效 print(f.get('info')) ,輸出字典{'name':'wjz','job':'IT'}