Python 資料持久化 - 物件序列化



Python 內建的 `open()` 函式返回的內建檔案物件有一個重要的缺點。當以 'w' 模式開啟時,`write()` 方法只接受字串物件。

這意味著,如果你的資料以任何非字串形式表示,無論是內建類(數字、字典、列表或元組)的物件,還是其他使用者定義類的物件,都不能直接寫入檔案。在寫入之前,你需要將其轉換為字串表示。

numbers=[10,20,30,40]
   file=open('numbers.txt','w')
   file.write(str(numbers))
   file.close()

對於二進位制檔案,`write()` 方法的引數必須是位元組物件。例如,整數列表透過 `bytearray()` 函式轉換為位元組,然後寫入檔案。

numbers=[10,20,30,40]
   data=bytearray(numbers)
   file.write(data)
   file.close()

要以相應的資料型別從檔案讀取回資料,需要進行反向轉換。

file=open('numbers.txt','rb')
   data=file.read()
   print (list(data))

這種將物件手動轉換為字串或位元組格式(反之亦然)的型別非常繁瑣和冗長。可以將 Python 物件的狀態以位元組流的形式直接儲存到檔案或記憶體流中,並檢索到其原始狀態。這個過程稱為序列化和反序列化。

Python 的內建庫包含各種用於序列化和反序列化過程的模組。

序號 名稱及描述
1

pickle

Python 特定的序列化庫

2

marshal

內部用於序列化的庫

3

shelve

Pythonic 物件持久化

4

dbm

提供 Unix 資料庫介面的庫

5

csv

用於將 Python 資料儲存和檢索到 CSV 格式的庫

6

json

用於序列化到通用 JSON 格式的庫

廣告