本文作者:念宗

python常用模块-序列化

念宗 6年前 ( 2018-11-20 ) 4309 抢沙发
摘要: json模块:优点:跨语言、体积小缺点:只能支持int\str\list\tuple\dict首先模块本身是不具备直接对文件进行读写的,是要通过创建好的文件对象进行读写操作。注意:...

json模块:

优点:跨语言、体积小

缺点:只能支持int\str\list\tuple\dict

首先模块本身是不具备直接对文件进行读写的,是要通过创建好的文件对象进行读写操作。

注意:load文件时json文件里必须用双引号[json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 5 (char 6)],因为输出是单引号,估计是里面转义会有问题,所以直接提示用双引号。

import json
"""
json.load("文件对象")       # json.load(ufo) 传入文件对象
json.loads("字符串")        # json.loads(ufo.read()) 传入字符串
json.dump("data","文件对象")       # 转换成字符串同时写入文件,data一般为字典格式
json.dumps("string/list/tuple/dict")        # 仅转换成字符串,不写入文件
"""
user_file = "1234.json"
ufo = open(user_file,'r+')

def read_bank_card():
    d_card = json.load(ufo)
    return d_card

def write_bank_card(data):
    ufo.seek(0)
    ufo.truncate()
    str_json = json.dump(data)
    ufo.close()

def write_bank_card(data):
    str_json = json.dumps(data)
    ufo.seek(0)
    ufo.truncate()
    ufo.write(str_json)
    ufo.close()

data_card = read_bank_card()
print(data_card)
# 写入时保证是中文:ensure_ascii=False.
ufo = open('goods.txt','r+')
ufo.seek(0)
ufo.truncate()
json.dump(dict_goods,ufo,indent=4,ensure_ascii=False)        # 写入时是多行格式,使用indent缩进参数,普遍使用缩进量为4.为0不缩进,不带这个参数则一行写
ufo.flush()
ufo.close()

 

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

序列化:

import shelve

f = shelve.open('shelve_test')  # 打开一个文件

names = ["alex", "rain", "test"]
info = {'name':'alex','age':22}


f["names"] = names  # 持久化列表
f['info_dic'] = info

f.close()

反序列化:

import shelve

d = shelve.open('shelve_test')  # 打开一个文件

print(d['names'])
print(d['info_dic'])


#del d['test'] #还可以删除


文章版权及转载声明:

作者:念宗本文地址:http://pyops.net/?id=26发布于 6年前 ( 2018-11-20 )
文章转载或复制请以超链接形式并注明出处运维之道

分享到: 网站分享代码

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

发表评论

快捷回复:

验证码

评论列表 (暂无评论,4309人围观)参与讨论

还没有评论,来说两句吧...