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除法运算小技巧
Apr 05 Python
获取Django项目的全部url方法详解
Oct 26 Python
Python探索之Metaclass初步了解
Oct 28 Python
python实现求两个字符串的最长公共子串方法
Jul 20 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
python 实现GUI(图形用户界面)编程详解
Jul 17 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
python 爬取学信网登录页面的例子
Aug 13 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
python自动分箱,计算woe,iv的实例代码
Nov 22 Python
python 实现快速生成连续、随机字母列表
Nov 28 Python
Pandas数据类型之category的用法
Jun 28 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中socket的用法详解
2014/10/24 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
详解Webpack实战之构建 Electron 应用
2017/12/25 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
python中函数总结之装饰器闭包详解
2016/06/12 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
英国床垫在线:Mattress Online
2016/12/07 全球购物
大学生表扬信范文
2014/01/09 职场文书
xxx同志考察材料
2014/02/07 职场文书
《梅花魂》教学反思
2014/04/30 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
2014年安全员工作总结
2014/11/13 职场文书
爱心捐助活动总结
2015/05/09 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书