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中使用items()方法返回字典元素对的教程
May 21 Python
Python使用爬虫猜密码
Feb 19 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
May 25 Python
python 性能提升的几种方法
Jul 15 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
May 05 Python
python 执行shell命令并将结果保存的实例
May 11 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
python numpy存取文件的方式
Apr 01 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
用Python生成HTML表格的方法示例
Mar 06 Python
Python数据结构dict常用操作代码实例
Mar 12 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
深入掌握include_once与require_once的区别
2013/06/17 PHP
解析php中curl_multi的应用
2013/07/17 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
详解实现vue的数据响应式原理
2021/01/20 Vue.js
java判断三位数的实例讲解
2019/06/10 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
司马光教学反思
2014/02/01 职场文书
学习十八大报告感言
2014/02/28 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
教师节主题班会教案
2015/08/17 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
小程序实现侧滑删除功能
2022/06/25 Javascript