python模块之sys模块和序列化模块(实例讲解)


Posted in Python onSeptember 13, 2017

sys模块

sys模块是与python解释器交互的一个接口

sys.argv   命令行参数List,第一个元素是程序本身路径
sys.exit(n)  退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version  获取Python解释程序的版本信息
sys.path   返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform  返回操作系统平台名称

序列化模块

序列化的目的:

以某种存储形式使自定义对象持久化

将对象从一个地方传递到另一个地方

使程序更具维护性

python模块之sys模块和序列化模块(实例讲解)

json

# Json模块提供了四个功能:dumps、dump、loads、load


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转换完的字符串类型的字典中的字符串是由""表示的

dic2 = json.loads(str_dic) #反序列化:将一个字符串格式的字典转换成一个字典
#注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
print(type(dic2),dic2) #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}


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'}]
import json
f = open('json_file','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump(dic,f) #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
f.close()

f = open('json_file')
dic2 = json.load(f) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
f.close()
print(type(dic2),dic2)
import json
f = open('file','w')
json.dump({'国籍':'中国'},f)
ret = json.dumps({'国籍':'中国'})
f.write(ret+'\n')
json.dump({'国籍':'美国'},f,ensure_ascii=False)
ret = json.dumps({'国籍':'美国'},ensure_ascii=False)
f.write(ret+'\n')
f.close()

ensure_ascii关键字参数

pickle

json & pickle

json,用于字符串 和 python数据类型间进行转换

pickle,用于python特有的类型 和 python的数据类型间进行转换

# pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化


import pickle
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic)
print(str_dic) #一串二进制内容

dic2 = pickle.loads(str_dic)
print(dic2) #字典

import time
struct_time = time.localtime(1000000000)
print(struct_time)
f = open('pickle_file','wb')
pickle.dump(struct_time,f)
f.close()

f = open('pickle_file','rb')
struct_time2 = pickle.load(f)
print(struct_time2.tm_year)

shelve

# shelve也是python提供给我们的序列化工具,比pickle用起来更简单一些。
# shelve只提供给我们一个open方法,是用key来访问的,使用起来和字典类似。



import shelve
f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据
f.close()

import shelve
f1 = shelve.open('shelve_file')
existing = f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
f1.close()
print(existing)
# 这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。所以当我们知道我们的应用如果只进行读操作,我们可以让shelve通过只读方式打开DB


import shelve
f = shelve.open('shelve_file', flag='r')
existing = f['key']
f.close()
print(existing)
# 由于shelve在默认情况下是不会记录待持久化对象的任何修改的,所以我们在shelve.open()时候需要修改默认参数,否则对象的修改不会保存。


import shelve
f1 = shelve.open('shelve_file')
print(f1['key'])
f1['key']['new_value'] = 'this was not here before'
f1.close()

f2 = shelve.open('shelve_file', writeback=True)
print(f2['key'])
f2['key']['new_value'] = 'this was not here before'
f2.close()



"""
writeback方式有优点也有缺点。优点是减少了我们出错的概率,并且让对象的持久化对用户更加的透明了;但这种方式并不是所有的情况下都需要,首先,使用writeback以后,shelf在open()的时候会增加额外的内存消耗,并且当DB在close()的时候会将缓存中的每一个对象都写入到DB,这也会带来额外的等待时间。因为shelve没有办法知道缓存中哪些对象修改了,哪些对象没有修改,因此所有的对象都会被写入。
"""

以上这篇python模块之sys模块和序列化模块(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python正则表达式去掉数字中的逗号(python正则匹配逗号)
Dec 25 Python
Python random模块(获取随机数)常用方法和使用例子
May 13 Python
Python出现segfault错误解决方法
Apr 16 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 Python
基于python的socket实现单机五子棋到双人对战
Mar 24 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
详解在python操作数据库中游标的使用方法
Nov 12 Python
使用Django搭建网站实现商品分页功能
May 22 Python
Pytorch中TensorBoard及torchsummary的使用详解
May 12 Python
使用Django实现商城验证码模块的方法
Jun 01 Python
python模块之time模块(实例讲解)
Sep 13 #Python
python difflib模块示例讲解
Sep 13 #Python
Python网络编程 Python套接字编程
Sep 13 #Python
python和ruby,我选谁?
Sep 13 #Python
python实现简单点对点(p2p)聊天
Sep 13 #Python
django 常用orm操作详解
Sep 13 #Python
Python三级菜单的实例
Sep 13 #Python
You might like
PHP用户指南-cookies部分
2006/10/09 PHP
推荐一篇入门级的Class文章
2007/03/19 PHP
动态表格Table类的实现
2009/08/26 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
AngularJS入门之动画
2016/07/27 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
vue axios 二次封装的示例代码
2017/12/08 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
高三生物教学反思
2014/01/25 职场文书
公司营业员的自我评价
2014/03/04 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
公司车辆管理制度
2015/08/04 职场文书
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android