Pythonオブジェクト向けプログラミングガイド(9章)シーケンス化と保存-JSON、YAML、PickleCSVとXML

3132 ワード

この箱の底の本を出して読んで、感じは悪くなくて、自分に記録してあげます.
JSON,YAML,Pickle,XML,CSVはデータ交換に適しており,主に複数のオブジェクトのシーンではなく単一のオブジェクトに適用される.
Shelveは複数のオブジェクトの永続化をサポート
Pythonのオブジェクトを格納するには、まずバイトに変換してからファイルにバイトを書き込む必要があります.このプロセスはシーケンス化され、データ変換、圧縮、符号化されます.
これは良い本で、超腐った翻訳で、多くの文字の説明文が読めません.
9.3永続化に使用するクラスを定義します.
本ではクラスを定義し、jinja 2でインスタンスをレンダリングします.
コードの书き方は绝対に上手で、jinjaの使い方は忘れそうです.
import datetime
from collections import defaultdict

class Post:
    def __init__(self, date, title, rst_text, tags):
        self.date = date
        self.title = title
        self.rst_text = rst_text
        self.tags = tags

    def as_dict(self):
        return dict(
            date=str(self.date),
            title=self.title,
            underline="_" * len(self.title),
            res_test = self.rst_text,
            tag_text = " ".join(self.tags)
        )

class Blog:
    def __init__(self, title, posts=None):
        self.title = title
        self.entries = posts if posts is not None else []

    def append(self, post):
        self.entries.append(post)

    def by_tag(self):
        tag_index = defaultdict()
        for post in self.entries:
            for tag in post.tags:
                tag_index[tag].addend(post.as_dict())
        return tag_index

    def as_dict(self):
        return dict(
            title = self.title,
            underline = '='*len(self.title),
            entries = [p.as_dict() for p in self.entries]
        )


travel = Blog("Travel")
#       
travel.append(
    Post(date=datetime.datetime(2014, 11, 14, 17, 25),
         title="Hard Aground",
         rst_text="""Some embarrassing revelation.
                Including and cyr""",
         tags=("#RedRanger", "#Whiby42", "#ICW")
         )
)
travel.append(
    Post(date=datetime.datetime(2014, 11, 14, 17, 25),
         title="Hard Aground",
         rst_text="""Some embarrassing revelation.
                Including and cyr""",
         tags=("#RedRanger", "#Whiby42", "#ICW"),
         )
)
travel.append(
    Post(date=datetime.datetime(2014, 11, 18, 15, 30),
         title="Anchor Follies",
         rst_text="""Some witty epigram.Including < & >
         character.""",
         tags=("#RedRanger", "#Whiby42", "#Mistakes"),
         )
)

これは後続のシーケンス化が必要なオブジェクトtravelで、本の中の後でまずこのオブジェクトのいくつかの方法でJinja 2モジュールのレンダリング実行を行って、私は書かないで、このコードを写して私を眠らせます.
 
9.4 JSONによるダンプとロード
私の理解JSONは理想的なデータ交換言語です.
Pythonでjsonがサポートするタイプと対応JSONの関係
dict: object
list,tuple: array
str: string
int, float: number
True: true
Flase: Flase
None: null
 
import json
from t9_3 import travel

print(json.dumps(travel.as_dict(), indent=4))

シーケンス化出力、効果は打たれません.
Pythonオブジェクトを辞書に書き換えると、辞書を別途作成する必要がなく、より良い置き換え方法を提供する必要があります(as_dictメソッドが使用されています).
 
 
书かないで、この本の中でコードの间违いが多すぎて、コードを切り取っても问题があって、中国语の翻訳は更にごみで、暇な时ツールの本が読んでみるといいです.