1. 程式人生 > >廖雪峰python3複習總結——day9-3

廖雪峰python3複習總結——day9-3

Python的os模組封裝了作業系統的目錄和檔案操作,要注意這些函式有的在os模組中,有的在os.path模組中。

序列化:把變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,在Python中叫pickling;

反序列化:把變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpickling。

Python提供了pickle模組來實現序列化。

>>> import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'


>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()


反序列化:
>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}

JSON:如果我們要在不同的程式語言之間傳遞物件,就必須把物件序列化為標準格式。 JSON是一種標準格式

JSON表示的物件就是標準的JavaScript語言的物件。JSON標準規定JSON編碼是UTF-8

>>> import json
>>> d = dict(name='Bob', age=20, score=88)
>>> json.dumps(d)
'{"age": 20, "score": 88, "name": "Bob"}'


>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
>>> json.loads(json_str)
{'age': 20, 'score': 88, 'name': 'Bob'}

類的序列化與反序列化:

import json

class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score


def student2dict(std):
    return {
        'name': std.name,
        'age': std.age,
        'score': std.score
    }

>>> print(json.dumps(s, default=student2dict))
{"age": 20, "name": "Bob", "score": 88}

針對所有類:
print(json.dumps(s, default=lambda obj: obj.__dict__))

反序列化:
def dict2student(d):
    return Student(d['name'], d['age'], d['score'])