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中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
Python3 SSH远程连接服务器的方法示例
Dec 29 Python
python实现可变变量名方法详解
Jul 01 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
Python任务自动化工具tox使用教程
Mar 17 Python
Python requests.post方法中data与json参数区别详解
Apr 30 Python
python右对齐的实例方法
Jul 05 Python
基于python实现删除指定文件类型
Jul 21 Python
详解Python流程控制语句
Oct 28 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
Django与数据库交互的实现
Jun 03 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读取der格式证书乱码解决方法
2015/06/22 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
vue根据值给予不同class的实例
2018/09/29 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
python单元测试unittest实例详解
2015/05/11 Python
python实现统计代码行数的方法
2015/05/22 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Python探索之ModelForm代码详解
2017/10/26 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
python匹配两个短语之间的字符实例
2018/12/25 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
python字符串循环左移
2019/03/08 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
总经理司机岗位职责
2014/02/06 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
电力安全学习心得体会
2016/01/18 职场文书
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript