入門Pythonは、内蔵モジュール - シングモジュール(JSONモジュール、pickleモジュール)

入門Pythonは、内蔵モジュール - シングモジュール(JSONモジュール、pickleモジュール)

1、の順序

3つの方法でこのような配列Pythonモジュール:

JSONモジュール:

データは、異なる言語フォーマット変換、すなわち異なる言語の特殊な文字列が使用されているに従います。(このような[1、2、3]特殊文字列を使用してJSONに変換し、その後バイトに符号化された現像剤PHPに送信され、開発者が特定の文字列にデコードし、次に逆に、PHPができるPythonリストとして[1、2、3]):ソース配列(リスト)の溶液

JSONシリアライズのサポートデータ構造のPythonの一部のみ:dictの、リスト、タプル、STR、INT、フロート、真、偽、なし

pickleモジュール:

データフォーマット変換は、それだけPython言語で使用することができるPython言語に従うことができます。

Pythonのサポートすべてのデータ型は、オブジェクトのインスタンスが含まれます。

モジュールを棚上げ:操作の辞書のようなモードでは、特定の文字列を操作します。

本質的に、プロセスの特定の配列(文字列やバイト)として等(例えば、辞書、リストなど)のデータ構造を、変換のシーケンスはシリアライゼーションと呼ばれています。

(1)モジュールの配列は、特定の配列の共通のデータ構造に変換することであり、この配列はまた、特別なアンチバック・ソリューションであってもよいです。

(2)主な目的:

<1>のデータファイルを読み書きします

<2>データ伝送ネットワーク

(3)JSONモジュール

<1> JSONモジュールデータ構造は、特定の文字列の条件を満たすように変換され、デシリアライズするために戻って復元することができます

辞書、リスト、タプル<2>は、データ型の配列であり得ます

4グループ2

ネットワークのための送信は負荷をダンプします----
ファイルストレージのための----ロードダンプ

1>、負荷をダンプ

[1]辞書文字列型に変換
import json
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic)  #序列化:将一个字典转换成一个字符串
print(type(str_dic),str_dic)  #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
#注意,json转换完的字符串类型的字典中的字符串是由""表示的
[2]辞書型辞書の種類に文字列を変換し
import json
dic2 = json.loads(str_dic)  #反序列化:将一个字符串格式的字典转换成一个字典
#注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
print(type(dic2),dic2)  #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
[3]また、リストの種類をサポートしています
list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 
print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads(str_dic)
print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]

2>ダンプ、ロード

[1]文字列にオブジェクトをファイルに書き込みます
import json
f = open('json_file.json','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
f.close()
# json文件也是文件,就是专门存储json字符串的文件。
[2]辞書の文字列型にファイルを変換します
import json
f = open('json_file.json')
dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
f.close()
print(type(dic2),dic2)
その他のパラメータ

ensure_ascii:すべての非ASCII文字は、ダンプがFalseに設定ensure_asciiますちょうどその時、\ uXXXXというシーケンスとして表示されたとき、それは、Trueの場合は、正しく表示するために中国のJSONを入金。

separators:セパレータは、実際に(item_separator、dict_separator)タプル、デフォルト(:)は,,され、その間辞書キーによって表される「」キーと値の間で区切られました 『:』分離しました。

sort_keys:データの値は、キーに従ってソート。

同じファイルの複数の格納されたデータのJSON配列

複数のデータファイルを格納するためのJSONシリアライズが問題である、デフォルトのファイルは、JSONのJSONデータを格納することができ、それは、解決に示すことができます。

对于json 存储多个数据到文件中
dic1 = {'name':'oldboy1'}
dic2 = {'name':'oldboy2'}
dic3 = {'name':'oldboy3'}
f = open('序列化',encoding='utf-8',mode='a')
json.dump(dic1,f)
json.dump(dic2,f)
json.dump(dic3,f)
f.close()

f = open('序列化',encoding='utf-8')
ret = json.load(f)
ret1 = json.load(f)
ret2 = json.load(f)
print(ret)

上記のコードは、ソリューションのエラーが発生します。

dic1 = {'name':'oldboy1'}
dic2 = {'name':'oldboy2'}
dic3 = {'name':'oldboy3'}
f = open('序列化',encoding='utf-8',mode='a')
str1 = json.dumps(dic1)
f.write(str1+'\n')
str2 = json.dumps(dic2)
f.write(str2+'\n')
str3 = json.dumps(dic3)
f.write(str3+'\n')
f.close()

f = open('序列化',encoding='utf-8')
for line in f:
    print(json.loads(line))

(4)ピクルスモジュール

<1>ピクルスモジュールは、すべてのデータ構造はPythonであるなど、およびオブジェクト・タイプはバイトに変換され、その後減少がデシリアライズするために戻ってもよいです

<2>が唯一のPython、Pythonのシーケンスのほぼすべてのデータ型を持っている、機能が匿名でシーケンスすることはできません

そして、JSONほとんどほとんどと同様に4つの方法の2対の使用。

ネットワークのための送信は負荷をダンプします----
ファイルストレージのための----ロードダンプ

1>、負荷をダンプ

import pickle
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic)
print(str_dic)  # bytes类型

dic2 = pickle.loads(str_dic)
print(dic2)    #字典
# 还可以序列化对象
import pickle
def func():
    print(666)

ret = pickle.dumps(func)
print(ret,type(ret))  # b'\x80\x03c__main__\nfunc\nq\x00.' <class 'bytes'>
f1 = pickle.loads(ret)  # f1得到 func函数的内存地址
f1()  # 执行func函数

2>ダンプ、ロード

dic = {(1,2):'oldboy',1:True,'set':{1,2,3}}
f = open('pick序列化',mode='wb')
pickle.dump(dic,f)
f.close()
with open('pick序列化',mode='wb') as f1:
    pickle.dump(dic,f1)

ファイルの複数に格納されたデータのピクルス配列

dic1 = {'name':'oldboy1'}
dic2 = {'name':'oldboy2'}
dic3 = {'name':'oldboy3'}

f = open('pick多数据',mode='wb')
pickle.dump(dic1,f)
pickle.dump(dic2,f)
pickle.dump(dic3,f)
f.close()

f = open('pick多数据',mode='rb')
while True:
    try:
        print(pickle.load(f))
    except EOFError:
        break
f.close()

ピクルスファイル書かれたコンテキストを書くので、

class MyPickle:
    def __init__(self,path,mode='load'):
        self.path = path
        self.mode = 'ab' if mode=='dump' else 'rb'

    def __enter__(self):
        self.f = open(self.path, mode=self.mode)
        return self

    def dump(self,content):
        pickle.dump(content,self.f)

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.f.close()

    def __iter__(self):
        while True:
            try:
                yield  pickle.load(self.f)
            except EOFError:
                break


class Course:
    def __init__(self,name,price,period):
        self.name = name
        self.price = price
        self.period = period
python = Course('python',19800,'6 months')
linux = Course('linux',19800,'6 months')


with MyPickle('course_file') as p:
    for obj in p:
        print(obj.__dict__)
with MyPickle('course_file','dump') as p:
    p.dump(python)
    p.dump(linux)

with open('course_file','ab') as f:
    pickle.dump(linux,f)

with open('course_file','rb') as f:
    while True:
        try:
            obj = pickle.load(f)
            print(obj.__dict__)
        except EOFError:
            break

おすすめ

転載: www.cnblogs.com/caiyongliang/p/11506378.html