自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

探索 Python中 序列化與反序列化

開發(fā) 前端
本文介紹了Python中序列化與反序列化的概念,并深入探討了JSON和Pickle?兩個(gè)常用模塊的用法。

在Python編程中,序列化與反序列化是處理數(shù)據(jù)的重要概念。序列化是將數(shù)據(jù)轉(zhuǎn)換為可存儲或傳輸?shù)母袷?,而反序列化則是將存儲或傳輸?shù)臄?shù)據(jù)重新轉(zhuǎn)換為程序內(nèi)部的數(shù)據(jù)結(jié)構(gòu)。Python提供了許多內(nèi)置模塊來執(zhí)行這些任務(wù),其中最常用的是JSON和Pickle模塊。本文將深入探討JSON和Pickle模塊,詳細(xì)介紹它們的用法、區(qū)別以及最佳實(shí)踐,幫助更好地理解和應(yīng)用序列化與反序列化的概念。

序列化與反序列化是Python中處理數(shù)據(jù)的關(guān)鍵概念。在介紹JSON和Pickle模塊之前,讓我們先了解一下什么是序列化與反序列化。

一、什么是序列化與反序列化?

序列化是將數(shù)據(jù)轉(zhuǎn)換為可存儲或傳輸?shù)母袷降倪^程。它將數(shù)據(jù)轉(zhuǎn)換為字節(jié)流或文本字符串,以便在存儲到文件或通過網(wǎng)絡(luò)傳輸時(shí)使用。反序列化則是將序列化的數(shù)據(jù)重新轉(zhuǎn)換為程序內(nèi)部的數(shù)據(jù)結(jié)構(gòu)。這兩個(gè)過程對于數(shù)據(jù)的持久化和跨平臺通信至關(guān)重要。

二、為何要序列化

為什么要序列化,方便數(shù)據(jù)傳輸,不同語言都遵循的一種數(shù)據(jù)轉(zhuǎn)化格式,即不同語言都使用的特殊字符串。(比如Python的一個(gè)列表[1, 2, 3]利用json轉(zhuǎn)化成特殊的字符串,然后再編碼成bytes發(fā)送給php的開發(fā)者,php的開發(fā)者就可以解碼成特殊的字符串,然后再反解成原數(shù)組(列表): [1, 2, 3])。每種語言都有自己的數(shù)據(jù)結(jié)構(gòu),為了方便數(shù)據(jù)傳輸,所以需要序列化,網(wǎng)絡(luò)數(shù)據(jù)傳輸過程中最常用的數(shù)據(jù)結(jié)構(gòu)是json。

序列化得到結(jié)果,也就是特定的格式的內(nèi)容有兩種用途:

  • 可用于存儲,用于存檔
  • 傳輸給其他平臺使用,跨平臺數(shù)據(jù)交互

三、json常用方法

當(dāng)談到 JSON(JavaScript Object Notation)模塊時(shí),通常是指 Python 中的 json 模塊。這個(gè)模塊提供了處理 JSON 數(shù)據(jù)的方法,包括加載(load)、加載字符串(loads)、轉(zhuǎn)儲(dump)和轉(zhuǎn)儲字符串(dumps)等操作。下面是關(guān)于這四個(gè)方法的詳細(xì)示例代碼:

1.load 方法

用于從文件中讀取 JSON 數(shù)據(jù),并將其解析為 Python 對象。

import json

# 從 JSON 文件中加載數(shù)據(jù)
with open('data.json', 'r') as file:
    data = json.load(file)

# 打印加載的數(shù)據(jù)
print(data)

2.loads 方法

用于將 JSON 字符串解析為 Python 對象。

import json

# JSON 字符串
json_str = '{"name": "John", "age": 30, "city": "New York"}'

# 將 JSON 字符串加載為 Python 對象
data = json.loads(json_str)

# 打印加載的數(shù)據(jù)
print(data)

3.dump 方法

用于將 Python 對象轉(zhuǎn)儲到文件中,將 Python 對象序列化為 JSON 格式并寫入文件。

import json

# Python 對象
data = {"name": "John", "age": 30, "city": "New York"}

# 將數(shù)據(jù)轉(zhuǎn)儲到 JSON 文件
with open('output.json', 'w') as file:
    json.dump(data, file)

4.dumps 方法

用于將 Python 對象轉(zhuǎn)儲為 JSON 字符串。

import json

# Python 對象
data = {"name": "John", "age": 30, "city": "New York"}

# 將數(shù)據(jù)轉(zhuǎn)儲為 JSON 字符串
json_str = json.dumps(data)

# 打印生成的 JSON 字符串
print(json_str)

如何使用 load、loads、dump 和 dumps 四個(gè)方法。但你可以根據(jù)需要進(jìn)行修改和擴(kuò)展。這些方法在處理 JSON 數(shù)據(jù)時(shí)非常有用,可以輕松地在 Python 對象和 JSON 之間進(jìn)行轉(zhuǎn)換。

四、序列化與反序列化

JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,易于人閱讀和編寫,也易于機(jī)器解析和生成。在Python中,可以使用json模塊進(jìn)行JSON格式的序列化和反序列化。如下圖所示:

插入一張圖片

1. 使用json模塊

JSON序列化示例:

import json

data = {'name': 'Alice', 'age': 30, 'city': 'New York'}

# 將Python對象序列化為JSON格式的字符串
json_string = json.dumps(data)
print(json_string)

JSON反序列化示例:

import json

json_string = '{"name": "Alice", "age": 30, "city": "New York"}'

# 將JSON格式的字符串反序列化為Python對象
python_obj = json.loads(json_string)
print(python_obj)

2. 使用Pickle模塊

Pickle模塊是Python中用于序列化和反序列化數(shù)據(jù)的模塊,與JSON不同,Pickle可以處理幾乎所有Python數(shù)據(jù)類型。它的序列化形式不可讀,但更適合于Python特定對象的持久化。

Pickle序列化示例:

import pickle

data = {'name': 'Bob', 'age': 25, 'city': 'San Francisco'}

# 將Python對象序列化為字節(jié)流
pickle_bytes = pickle.dumps(data)
print(pickle_bytes)

Pickle反序列化示例:

import pickle

pickle_bytes = b'\x80\x04\x95\x17\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x03Bob\x94\x8c\x03age\x94K\x19\x8c\x04city\x94\x8c\x0fSan Francisco\x94u.'

# 將字節(jié)流反序列化為Python對象
python_obj = pickle.loads(pickle_bytes)
print(python_obj)

總結(jié)

本文介紹了Python中序列化與反序列化的概念,并深入探討了JSON和Pickle兩個(gè)常用模塊的用法。JSON適用于簡單數(shù)據(jù)結(jié)構(gòu)的序列化和反序列化,而Pickle則更適用于Python特定對象的處理。選擇使用JSON還是Pickle取決于需求和數(shù)據(jù)類型。序列化和反序列化是數(shù)據(jù)處理中必不可少的技術(shù),在實(shí)際應(yīng)用中,選擇合適的模塊和方法可以更好地管理和處理數(shù)據(jù)。

責(zé)任編輯:趙寧寧 來源: python學(xué)習(xí)之旅
相關(guān)推薦

2022-08-06 08:41:18

序列化反序列化Hessian

2018-03-19 10:20:23

Java序列化反序列化

2011-06-01 15:05:02

序列化反序列化

2009-08-24 17:14:08

C#序列化

2012-04-13 10:45:59

XML

2009-08-06 11:16:25

C#序列化和反序列化

2011-05-18 15:20:13

XML

2023-11-20 08:44:18

數(shù)據(jù)序列化反序列化

2009-06-14 22:01:27

Java對象序列化反序列化

2019-11-20 10:07:23

web安全PHP序列化反序列化

2009-08-25 14:24:36

C#序列化和反序列化

2011-06-01 14:50:48

2021-11-18 07:39:41

Json 序列化Vue

2009-09-09 16:10:11

.NET序列化和反序列

2009-08-25 14:43:26

C#序列化和反序列化

2009-09-09 14:45:41

XML序列化和反序列化

2009-09-09 15:47:27

XML序列化和反序列化

2010-03-19 15:54:21

Java Socket

2009-07-29 13:39:02

JSON序列化和反序列ASP.NET AJA

2016-09-21 00:15:27

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號