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写asp详细讲解
Dec 16 Python
在Python的Django框架中生成CSV文件的方法
Jul 22 Python
Python装饰器用法实例总结
Feb 07 Python
Php多进程实现代码
May 07 Python
python实现推箱子游戏
Mar 25 Python
对Python模块导入时全局变量__all__的作用详解
Jan 11 Python
python游戏开发之视频转彩色字符动画
Apr 26 Python
python字符串下标与切片及使用方法
Feb 13 Python
Selenium常见异常解析及解决方案示范
Apr 10 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
Jan 08 Python
python实战之用emoji表情生成文字
May 08 Python
Python音乐爬虫完美绕过反爬
Aug 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
Php做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
javascript的BOM汇总
2015/07/16 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
Python 递归函数详解及实例
2016/12/27 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
详解爬虫被封的问题
2019/04/23 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
教师试用期自我鉴定
2014/02/12 职场文书
汽修专业自荐信
2014/07/07 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL
用python批量解压带密码的压缩包
2021/05/31 Python