json模組
json用於不同語言之間的資料交換,例如C和Python之間等等,即可跨語言。而pickle只能用於python與python之間資料交換。
序列化與反序列化
我們把物件(變數)從記憶體變成可儲存或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也稱為serialization,marshalling,flattening等等,都是一個意思。序列化之後,就可以把序列化後的內容寫入磁碟,或是透過網路傳輸到別的機器上。反過來,把變數內容從序列化的物件重新讀到記憶體稱之為反序列化,即unpickling。
如果我們要在不同的程式語言之間傳遞對象,就必須把物件序列化為標準格式,例如XML,但更好的方法是序列化為JSON,因為JSON表示出來就是一個字符串,可以被所有語言讀取,也可以方便地儲存到磁碟或透過網路傳輸。 JSON不僅是標準格式,而且比XML更快,而且可以直接在Web頁面中讀取,非常方便。
JSON表示的物件就是標準的JavaScript語言的對象,JSON和Python內建的資料類型對應如下:
在檔案中寫入讀取資料-字典
dic =' {‘string1':'hello'}' #写文件只能写入字符串 - 手动把字典变成字符串 f = open(‘hello', ‘w') f.write(dic)
f_read = open(‘hello', ‘r') data = f_read.read() #从文件中读出的都是字符串 data = eval(data) #提取出字符串中的字典 print(data[‘name'])
json實作上述功能- json可以在任意語言中傳送資料
dic = {‘string1':'hello'} data = json.dumps(dic) print(data) print(type(data)) #dumps()会把我们的变量变成一个json字符串 f = open(“new_hello”, “w”) f.write(data)
json字串和我們手動加’’ 變成的字串是有區別的,它遵循json字串規範,即字串用雙引號引起來。
dumps會把我們傳入的任何資料類型變成雙引號引起來的字串
# {‘string1':'hello'} ---> “{“string1”:”hello”}” # 8 ---> “8” # ‘hello' ---> ““hello”” – 被json包装后的数据内部只能有双引号 #[1, 2] ---> “[1, 2]”
我們在儲存或傳輸的時候把資料轉換成json字串,可以實現任何語言通用
f_read = open(“new_hello”, “r”) data = json.loads(f_read.read()) #这个data直接就是字典类型 print(data) print(type(data))
json模組中的方法
json.dumps() # 把数据包装成json字符串 – 序列化 json.loads() # 从json字符串中提取出原来的数据 – 反序列化
我們在python中將一個列表l = [1, 2, 3] 包裝成一個json字串並儲存或發送出去,假如我們在C語言中使用json解析,就會得到C語言中對應的資料結構,提取出來就是一個陣列buf[3] = {1, 2, 3}。
並不是說dumps和loads必須要一塊用,只要是符合json規範的json字串都可以用loads處理提取資料結構,和用不用dumps沒關係。
json.dump(data, f) #转换成json字符串并写入文件 #相当于 data = json.dumps(dic) + f.write(data) data = json.load(f) #先读取文件,再提取出数据 #相当于data = json.loads(f_read.read())
範例:
#----------------------------序列化 import json dic={'name':'alvin','age':23,'sex':'male'} print(type(dic))#<class 'dict'> j=json.dumps(dic) print(type(j))#<class 'str'> f=open('序列化对象','w') f.write(j) #-------------------等价于json.dump(dic,f) f.close()
#-----------------------------反序列化<br> import json f=open('序列化对象') data=json.loads(f.read())# 等价于data=json.load(f)
注意:
import json #dct="{'1':111}"#json 不认单引号 #dct=str({"1":111})#报错,因为生成的数据还是单引号:{'one': 1} dct='{"1":"111"}' print(json.loads(dct))
無論資料是怎麼建立的,只要滿足json格式,就可以json.loads出來,不一定非要dumps的數據才能loads。
pickle模組
Pickle的問題和所有其他程式語言特有的序列化問題一樣,就是它只能用於Python,並且可能不同版本的Python彼此都不相容,因此,只能用Pickle保存那些不重要的數據,不能成功地反序列化也沒關係。
##----------------------------序列化 import pickle dic={'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'])
pickle和json的用法是一樣的,二者學名都叫序列化,只不過json序列化之後的結果是字串,pickle序列化後的結果是位元組bytes。也就是說形式不同,內容是一樣的,但是,pickle序列化後的是bytes,也就是要寫入檔案的資料是bytes,所以open開啟檔案的時候要以wb的形式二進位開啟。 pickle寫入文件的內容是不可讀的(亂七八糟的字符,但是計算機可以識別),json寫入的數據是可讀的。 pickle支援的資料類型較多,pickle可以序列化函數和類別。雖然json不支援這兩種序列化,但大部分場景還是用json。
以上是Python的json模組和pickle模組怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

選擇Python還是C 取決於項目需求:1)如果需要快速開發、數據處理和原型設計,選擇Python;2)如果需要高性能、低延遲和接近硬件的控制,選擇C 。

通過每天投入2小時的Python學習,可以有效提升編程技能。 1.學習新知識:閱讀文檔或觀看教程。 2.實踐:編寫代碼和完成練習。 3.複習:鞏固所學內容。 4.項目實踐:應用所學於實際項目中。這樣的結構化學習計劃能幫助你係統掌握Python並實現職業目標。

在兩小時內高效學習Python的方法包括:1.回顧基礎知識,確保熟悉Python的安裝和基本語法;2.理解Python的核心概念,如變量、列表、函數等;3.通過使用示例掌握基本和高級用法;4.學習常見錯誤與調試技巧;5.應用性能優化與最佳實踐,如使用列表推導式和遵循PEP8風格指南。

Python適合初學者和數據科學,C 適用於系統編程和遊戲開發。 1.Python簡潔易用,適用於數據科學和Web開發。 2.C 提供高性能和控制力,適用於遊戲開發和系統編程。選擇應基於項目需求和個人興趣。

Python更適合數據科學和快速開發,C 更適合高性能和系統編程。 1.Python語法簡潔,易於學習,適用於數據處理和科學計算。 2.C 語法複雜,但性能優越,常用於遊戲開發和系統編程。

每天投入兩小時學習Python是可行的。 1.學習新知識:用一小時學習新概念,如列表和字典。 2.實踐和練習:用一小時進行編程練習,如編寫小程序。通過合理規劃和堅持不懈,你可以在短時間內掌握Python的核心概念。

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

WebStorm Mac版
好用的JavaScript開發工具