Python常用模块之序列化模块
用eval內置方法可以將一個字符串轉成python對象,不過,eval方法是有局限性的,對于普通的數據類型,json.loads和eval都能用,但遇到特殊類型的時候,eval就不管用了,所以eval的重點還是通常用來執行一個字符串表達式,并返回表達式的值。
#---轉換類型 d={"name":"yuan"} s=str(d) print(type(s)) d2=eval(s) print(d2[1]) with open("test") as f:for i in f :if type(eval(i.strip()))==dict:print(eval(i.strip())[1])# 計算 print(eval("12*7+5-3")) eval序列化:
把對象(變量)從內存中變成可存儲或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,序列化之后,就可以把序列化后的內容寫入磁盤,或者通過網絡傳輸到別的機器上。
反過來,把變量內容從序列化的對象重新讀到內存里稱之為反序列化,即unpickling。
json模塊 :
在不同的編程語言之間傳遞對象,就必須把對象序列化為標準格式,比如XML,但更好的方法是序列化為JSON
因為JSON表示出來就是一個字符串,可以被所有語言讀取,也可以方便地存儲到磁盤或者通過網絡傳輸。
JSON不僅是標準格式,并且比XML更快,而且可以直接在Web頁面中讀取,非常方便。
JSON表示的對象就是標準的JavaScript語言的對象一個子集,JSON和Python內置的數據類型對應如下:
pickle模塊:
##----------------------------序列化 import pickledic={'name':'alvin','age':23,'sex':'male'}print(type(dic))#<class 'dict'>j=pickle.dumps(dic) print(type(j))#<class 'bytes'>f=open('序列化對象_pickle','wb')#注意是w是寫入str,wb是寫入bytes,j是'bytes' f.write(j) #-------------------等價于pickle.dump(dic,f)f.close() #-------------------------反序列化 import pickle f=open('序列化對象_pickle','rb')data=pickle.loads(f.read())# 等價于data=pickle.load(f)print(data['age'])shelve模塊:
shelve模塊比pickle模塊簡單,只有一個open函數,返回類似字典的對象,可讀可寫;
key必須為字符串,而值可以是python所支持的數據類型
import shelvef = shelve.open(r'shelve.txt')# f['stu1_info']={'name':'alex','age':'18'} # f['stu2_info']={'name':'alvin','age':'20'} # f['school_info']={'website':'oldboyedu.com','city':'beijing'} # # # f.close()print(f.get('stu_info')['age'])結尾給大家推薦一個非常好的學習教程,希望對你學習Python有幫助!
Python基礎入門教程推薦:更多Python視頻教程-關注B站:Python學習者
Python爬蟲案例教程推薦:更多Python視頻教程-關注B站:Python學習者
總結
以上是生活随笔為你收集整理的Python常用模块之序列化模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python常用模块之logging模块
- 下一篇: Python常用模块之configpar