ホームページ  >  記事  >  バックエンド開発  >  Python のデータシリアル化操作の実装について話しましょう

Python のデータシリアル化操作の実装について話しましょう

PHPz
PHPz転載
2023-04-12 09:31:122058ブラウズ

日常の開発では、データのシリアル化と逆シリアル化は一般的なデータ操作です。Python では、開発者がデータのシリアル化操作を実装しやすくするために、json モジュールと pickle モジュールという 2 つのモジュールが提供されています。これら 2 つのモジュールの主な違いは次のとおりです:

  • json はテキスト シリアル化形式であるのに対し、pickle はバイナリ シリアル化形式です。
  • json は直感的に読み取ることができるものですが、 pickle いいえ;
  • json は相互運用可能で Python システムの外部で広く使用されていますが、pickle は Python 専用です;
  • デフォルトでは、json は Python の組み込み型のみを表すことができますサブセットはカスタム クラスを表すことはできません; しかし、pickle は多数の Python データ型を表すことができます。

Python のデータシリアル化操作の実装について話しましょう

Json モジュール

Json は、送信されるデータ量が少なく、データ形式の解析が簡単なため、軽量のデータ交換形式です。その特徴を活かし、各種システム間での対話的な運用でデータを転送するデータ形式として広く利用されています。これには、次のような一般的に使用される関数が複数含まれています。

dumps() 関数

dumps() 関数は、Python オブジェクトを Json 文字列にエンコードできます。例:

#字典转成json字符串 加上ensure_ascii=False以后,可以识别中文, indent=4是间隔4个空格显示 

import json 
d={'小明':{'sex':'男','addr':'上海','age':26},'小红':{ 'sex':'女','addr':'上海', 'age':24},}
print(json.dumps(d,ensure_ascii=False,indent=4)) 

#执行结果:
{
"小明": {
"sex": "男",
"addr": "上海",
"age": 26
},
"小红": {
"sex": "女",
"addr": "上海",
"age": 24
}
}

dump() 関数

dump() 関数は、Python オブジェクトを json 文字列にエンコードし、別個のファイルを作成することなく自動的にファイルに書き込むことができます。例:

#字典转成json字符串,不需要写文件,自动转成的json字符串写入到‘users.json’的文件中 
import json 
d={'小明':{'sex':'男','addr':'上海','age':26},'小红':{ 'sex':'女','addr':'上海', 'age':24},}
#打开一个名字为‘users.json’的空文件
fw =open('users.json','w',encoding='utf-8')

json.dump(d,fw,ensure_ascii=False,indent=4)

loads() 関数

loads() 関数は、json 文字列を Python データ型に変換できます。例:

#这是users.json文件中的内容
{
"小明":{
"sex":"男",
"addr":"上海",
"age":26
},
"小红":{
"sex":"女",
"addr":"上海",
"age":24
}
}

#!/usr/bin/python3
#把json串变成python的数据类型 
import json
#打开‘users.json’的json文件
f =open('users.json','r',encoding='utf-8')
#读文件
res=f.read()
print(json.loads(res)) 

#执行结果:
{'小明': {'sex': '男', 'addr': '上海', 'age': 26}, '小红': {'sex': '女', 'addr': '上海', 'age': 24}}

load() 関数

load() には、loads() と同様の関数があります。load() 関数は、json 文字列を Python データ型に変換できます。違いはパラメータです。これはファイル オブジェクトなので、このファイルを個別に読み取る必要はありません。例:

#把json串变成python的数据类型:字典,传一个文件对象,不需要再单独读文件 
import json 
#打开文件
f =open('users.json','r',encoding='utf-8') 
print(json.load(f))

#执行结果:
{'小明': {'sex': '男', 'addr': '上海', 'age': 26}, '小红': {'sex': '女', 'addr': '上海', 'age': 24}}

Pickle モジュール

Pickle モジュールには、Json モジュールと同様の関数があり、さらに 4 つの関数、つまり dump()、dumps()、loads()、load() が含まれています。

ダンプとダンプの違いは、前者はオブジェクトをシリアル化するのに対し、後者はオブジェクトをシリアル化してファイルに保存することです。

ロードとロードの違いは、前者はシリアル化された文字列を逆シリアル化するのに対し、後者はシリアル化された文字列をファイルから読み取って逆シリアル化することです。

dumps() 関数

dumps() 関数は、データを特別な形式の Python 言語でのみ認識される文字列に変換できます。例:

import pickle
# dumps功能
import pickle
data = ['A', 'B', 'C','D']
print(pickle.dumps(data))

b'x80x03]qx00(Xx01x00x00x00Aqx01Xx01x00x00x00Bqx02Xx01x00x00x00Cqx03Xx01x00x00x00Dqx04e.'

dump( ) 関数

dump() 関数は、データを特別な形式の Python 言語でのみ認識される文字列に変換し、ファイルに書き込むことができます。例:

# dump功能
with open('test.txt', 'wb') as f:
pickle.dump(data, f)
print('写入成功')

写入成功

loads() 関数

loads() 関数は、pickle データを Python データ構造に変換できます。例:

# loads功能
msg = pickle.loads(datastr)
print(msg)

['A', 'B', 'C', 'D']

load() 関数

load() 関数は、データ ファイルからデータを読み取り、Python データ構造に変換できます。例:

# load功能
with open('test.txt', 'rb') as f:
 data = pickle.load(f)
print(data)

['A', 'B', 'C', 'D']

概要

このセクションでは、データのシリアル化と逆シリアル化のサポートを提供する Python の json&pickle モジュールの一般的な操作を紹介します。


以上がPython のデータシリアル化操作の実装について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。