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实现类似ftp传输文件的网络程序示例
Apr 08 Python
深入讲解Python编程中的字符串
Oct 14 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
Python实现简单文本字符串处理的方法
Jan 22 Python
获取python文件扩展名和文件名方法
Feb 02 Python
Python基于socket模块实现UDP通信功能示例
Apr 10 Python
Python之读取TXT文件的方法小结
Apr 27 Python
Python基于dom操作xml数据的方法示例
May 12 Python
详解opencv Python特征检测及K-最近邻匹配
Jan 21 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
感知器基础原理及python实现过程详解
Sep 30 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
用Apache反向代理设置对外的WWW和文件服务器
2006/10/09 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
CI框架Session.php源码分析
2014/11/03 PHP
php格式化日期实例分析
2014/11/12 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
常用的javascript function代码
2008/05/23 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
浅析Vue 和微信小程序的区别、比较
2018/08/03 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
在Django的视图中使用form对象的方法
2015/07/18 Python
python实现聊天小程序
2018/03/13 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
python实现logistic分类算法代码
2020/02/28 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
自荐书格式
2013/12/01 职场文书
商务考察邀请函范文
2014/01/21 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
警告通知
2015/04/25 职场文书
会计入职心得体会
2016/01/22 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript