Python对象持久化笔记

使用eval()函数

scores = [66, 77, 88, 99]


def write_scores():
    with open('data_list.txt', 'w', encoding='utf8') as f:
        f.write(str(scores))


def read_scores():
    with open('data_list.txt', 'r', encoding='utf8') as f:
        lst = eval(f.read())
        print(lst)


if __name__ == '__main__':
    write_scores()
    read_scores()

输出:
[66, 77, 88, 99]

eval()函数能将字符串转换成python的表达式

使用pickle模块

>>> import pickle
>>> person = {'name':'Tom', 'age':20}

# 将对象序列为字符串
>>> s = pickle.dumps(person)
>>> s
b'\x80\x04\x95\x1a\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x03Tom\x94\x8c\x03age\x94K\x14u.'

# 从字符串反序列化对象
>>> p = pickle.loads(s)
>>> p
{'name': 'Tom', 'age': 20}
>>> type(p)
<class 'dict'>

使用dumps()方法和loads()方法,将对象序列化为字符串和从字符串反序列化对象

>>> person = {'name':'Tom', 'age':20}

# 以二进制形式将字典表对象写入文件
>>> pickle.dump(person, open('pickle_db', 'wb'))

# 以二进制形式读取文件,还原对象
>>> p = pickle.load(open('pickle_db', 'rb'))
>>> p
{'name': 'Tom', 'age': 20}
>>> type(p)
<class 'dict'>

使用dump()方法和load()方法,将对象序列化为文件和从文件反序列化对象

使用shelve模块

>>> import shelve
>>> scores = [77, 88, 99]
>>> student = {'name':'Mike', 'age':20}

# 创建文件准备保存多个对象
>>> db = shelve.open('shelve_student')

# 将不同对象序列化为文件,并以不同键值标记
>>> db['s'] = student
>>> db['scores'] = scores
>>> len(db)
2
>>> db['s']
{'name': 'Mike', 'age': 20}
>>> type(db['s'])
<class 'dict'>
>>> db['scores']
[77, 88, 99]

# 删除某个对象
>>> del db['scores']
>>> len(db)
1

将多个对象序列化为文件时可以使用shelve模块

import shelve
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return self.name


def write_shelve():
    s = Student('Tom', 20)
    db = shelve.open('shelve_student_db')
    db['s'] = s
    db.close()


def read_shelve():
    with open('data_list.txt', 'r', encoding='utf8') as f:
        db = shelve.open('shelve_student_db')
        st = db['s']
        print(st)
        print(st.name)
        print(st.age)
        db.close()


if __name__ == '__main__':
    write_shelve()
    read_shelve()

输出:
Tom
Tom
20

将自定义类型的对象序列化为文件也可以使用shelve模块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值