數據的保存格式(序列化)


什么是數據序列化?

數據序列化是指將結構化數據轉換成允許以共享或存儲的格式,並能恢復成原始結構。 在某些情況下,數據序列化的第二個目的是減少數據大小,從而減小對磁盤和帶寬的要求。

Flat vs. Nested data

在開始序列化數據之前,確定或決定在數據序列化期間如何結構化數據(扁平或嵌套)是非常重要的。 以下示例中顯示了兩種風格的差異

扁平風格:

{ "Type" : "A","field1": "value1", "field2": "value2", "field3": "value3" }

嵌套風格:

{"A"
    { "field1": "value1", "field2": "value2", "field3": "value3" } }

序列化文本

簡單文件(扁平數據)

repr

Python 中的 repr 方法接收單個對象參數,返回輸入的可打印形式:

# 扁平文本作為輸入
a =  { "Type" : "A", "field1": "value1", "field2": "value2", "field3": "value3" }

# 相同的輸入可以讀取自文件
a = open('/tmp/file.py', 'r')

# 返回輸入的可打印形式
# 輸出也能夠寫入文件
print(repr(a))

# 使用repr將內容寫入文件
with open('/tmp/file.py') as f:f.write(repr(a))

ast.literal_eval

literal_eval 方法安全地解析Python數據類型表達式並求值。其支持的數據類型有:字符串、數字、元組、列表、字典、布爾和None。

with open('/tmp/file.py', 'r') as f: inp = ast.literal_eval(f.read())

CSV 文件 (扁平數據)

Python 中的 CSV 模塊實現了讀取和寫入CSV形式的表格數據的類。

讀取的簡單例子:

# 從文件中讀取CSV數據
import csv
with open('/tmp/file.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

寫入的簡單例子:

# 將CSV數據寫入文件
import csv
with open('/temp/file.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(iterable)

YAML (嵌套數據)

Python 中有許多第三方庫用來解析和讀取/寫入 YAML 文件,例子如下:

# 使用load方法從文件中讀取 YAML 內容
import yaml
with open('/tmp/file.yaml', 'r', newline='') as f:
    try:
        print(yaml.load(f))
    except yaml.YAMLError as ymlexcp:
        print(ymlexcp)

JSON 文件 (嵌套數據)

Python 的 JSON 模塊可以用來讀取和寫入 JSON 模塊。示例如下:

讀取:

# 從文件中讀取 JSON 內容
import json
with open('/tmp/file.json', 'r') as f:
    data = json.load(f)

寫入:

# 使用 dump 方法將 JSON 內容寫入文件
import json
with open('/tmp/file.json', 'w') as f:
    json.dump(data, f, sort_keys=True)

XML (嵌套數據)

Python 中 XML 的解析可以使用 xml 庫。

示例:

# 從文件中讀取 XML 內容
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()

二進制

NumPy Array (扁平數據)

python 的 NumPy 數組可以將數據序列化成字節形式,或從字節形式的數據反序列化。

示例:

import NumPy as np

# 將 NumPy 數組轉換為字節形式
byte_output = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]).tobytes()

# 將字節形式轉換回 NumPy 數組
array_format = np.frombuffer(byte_output)

 

Pickle (扁平數據)

Python原生的數據序列化模塊稱為 Pickle 。

示例:

import pickle

# 示例字典
grades = { 'Alice': 89, 'Bob': 72, 'Charles': 87 }

# 使用 dumps 將對象轉換為序列化字符串
serial_grades = pickle.dumps( grades )

# 使用 loads 反序列化為對象
received_grades = pickle.loads( serial_grades )

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM