python:序列化與資料持久化

來源:互聯網
上載者:User

標籤:margin   取出   版本   字元   http   play   inf   adl   選擇   

資料持久化的方式有:

1.普通檔案無格式寫入:將資料直接寫入到檔案中

2.普通序列化寫入:json,pickle

3.DBM方式:shelve,dbm

 

相關內容:
  • json
  • pickle
  • shelve
  • dbm

 

首發時間:2018-02-23 20:52

 

json: 介紹:

按照指定格式【比如格式是字典,那麼檔案中就是字典】將資料明文寫入到檔案中,類型是bytes的,比如”中文“就會變成Unicode編碼

用法:
  • 首先要匯入模組import json
  • 序列化:
    • json.dump(序列化對象,檔案對象)
    • json.dumps(序列化對象),傳回值是一個字串,需要手動將這個字串寫入到檔案中
      print("------json序列化--------")import jsonimport timeinfo={    ‘date‘:time.localtime(),    ‘name‘:‘中文‘}f=open("test.txt","w")print("---------dump---------")# json.dump(info,f)# f.close()print("---------dumps,---------")f.write(json.dumps(info))f.close()
  • 還原序列化:
    • json.load(檔案對象)
    • json.loads(字串)
      print("------還原序列化--------")import jsonf=open("test.txt","r")print("-------load----------")# data=json.load(f)#1# print(data)print("-------loads----------")d2=json.loads(f.read())print(d2)f.close()

 

 

 對於多次dump\dumps,如何load\loads取出來:
  • 需要在dump的時候,手動對資料進行劃分
print("------json序列化--------")import jsonimport timeinfo={    ‘date‘:time.localtime(),    ‘name‘:‘中文‘   # ‘func‘:hello #註:json不可序列化函數}info2=[‘1‘,2,3,4]f=open("test.txt","w")print("---------dumps,---------")#用‘\n‘來區分兩份資料f.write(json.dumps(info)+"\n")f.write(json.dumps(info2)+"\n")f.close()
import jsonwith open("test.txt") as f:    a=json.loads(f.readline())    b=json.loads(f.readline())    print(a,b)

 

pickle:介紹:
  • 用於實現Python資料類型與Python特定二進位格式之間的轉換
  • 參數protocol規定了序列化的協議版本,預設情況下使用pikkle序列化資料是bytes的,開啟檔案的方式必須為二進位格式
用法:
  • 首先匯入模組import pickle
  • 序列化:
    • pickle.dump(序列化對象,檔案對象)
    • pickle.dumps(序列化對象),傳回值是一個字串,需要手動將這個字串寫入到檔案中
      import pickleinfo={    ‘name‘:‘1‘,    ‘age‘:2,}f=open("test2.txt","wb")pickle.dump(info,f)#序列化方法1# f.write(pickle.dumps(info))#序列化方法2f.close()
  • 還原序列化:
    • pickle.load(檔案對象)
    • pickle.loads(字串)
      print("------還原序列化--------")import picklef=open("test2.txt","rb")data=pickle.loads(f.read())#反序列方法1print(data)# data=pickle.load(f)#反序列方法2# print(data)f.close()

 

shelve:介紹:
  • 專門用於將Python資料類型的資料持久化到磁碟,操作類似於dict
用法:

  • 首先匯入模組import
  • shelve開啟一個檔案: shelve檔案對象 = shelve.open(檔案名稱)
  • 寫入:shelve檔案對象[key]=value
  • 讀出:shelve檔案對象.get(key)
import shelve,timed = shelve.open(‘shelve_test‘)  # 開啟一個檔案print("----------寫----------")info ={"name":‘lilei‘,"sex":"man"}name = ["autuman", "zhangsan", "lisi"]d["teacher"] = named["student"] = infod["date"] = time.ctime()print("--------讀------------")print(d.get("teacher"))print(d.get("student"))print(d.get("date"))d.close()

 

shelve可以很方便的序列化自訂的資料類型、函數:

import shelve,timeclass A:    def hello(self):        print("123")d = shelve.open(‘shelve_test‘)  # 開啟一個檔案print("----------寫----------")d[‘class‘] =Aprint("--------讀------------")a=d.get(‘class‘)()a.hello()d.close()

dbm:介紹:
  • dbm與shelve非常類似,但dbm的鍵和值必須是字串類型
  • dbm預設寫入的資料是bytes的,將所有字串都序列化成bytes的
用法:
  • 首先匯入模組imort dbm【注意的是由很多個不同的dbm,可以選擇來使用,這裡使用預設】
  • 開啟檔案:dbm對象=dbm.open(檔案名稱,開啟模式)
  • 寫入:dbm對象[key]=value
  • 讀取: dbm對象[key]
import dbmdb=dbm.open("test.txt","c")print("寫".center(50,‘-‘))db["name"]="1111111111112"db["name2"]="2222222222222"print("讀".center(50,‘-‘))print(db["name"])print(db["name2"])db.close()

 

python:序列化與資料持久化

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.