我的Python成长之路---第六天---Python基础(19)---2016年2月20日(晴)

shelve模块

shelve模块是pickle模块的扩展,可以通过key,value的方式访问pickle持久化保存的数据

持久化保存:

1
2
3
4
5
6
7
8
9
10
11
12
13
import shelve
sw = shelve.open('shelve_test.pkl') # 创建shelve对象
name = ['13', '14', '145', 6] # 创建一个列表
dist_test = {"k1":"v1", "k2":"v2"}
sw['name'] = name # 将列表持久化保存
sw['dist_test'] = dist_test
sw.close() # 关闭文件,必须要有
sr = shelve.open('shelve_test.pkl')
print(sr['name']) # 读出列表
print(sr['dist_test']) # 读出字典
sr.close()

说明:

1、其实shelve模块其实就是pickle模块的一个扩展,可以直接用key来读取持久化保存的数据,而不用原生pickle一样通过持久化的顺序来一个个读取出来

2、sw['name']里的name其实就是key也就是自定义的一个名字,读取的时候通过这个key就可以方便读取出来

3、shelve_test.pkl并不是最终的文件名,shelve会自动生成如下三个后缀的文件

866948-20160227134556161-1077575594.png

xml处理模块

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

我们先来,通过一张图认识一下xml文件的组成结构

866948-20160227134600052-1330141834.jpg

说明:

最外层的标签我们称之为跟标签、也就是root,其他标签都是子标签,也就是child

1
2
3
4
5
6
7
8
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml') # 读取xml文件,并以Element对象的形式保存
root = tree.getroot() # 获取根
for child in root: # 遍历root下的子标签
    print(child.tag, child.attrib) # 打印标签名和属性
    for i in child:
        print(i.tag, i.text, i.attrib) # 打印标签名值和属性

输出结果:

country {'name': 'Liechtenstein'}

rank 2 {'updated': 'yes'}

year 2008 {}

gdppc 141100 {}

neighbor None {'direction': 'E', 'name': 'Austria'}

neighbor None {'direction': 'W', 'name': 'Switzerland'}

country {'name': 'Singapore'}

rank 5 {'updated': 'yes'}

year 2011 {}

gdppc 59900 {}

neighbor None {'direction': 'N', 'name': 'Malaysia'}

country {'name': 'Panama'}

rank 69 {'updated': 'yes'}

year 2011 {}

gdppc 13600 {}

neighbor None {'direction': 'W', 'name': 'Costa Rica'}

neighbor None {'direction': 'E', 'name': 'Colombia'}

我们也可以通过标签名来获取某一类标签的内容

1
2
for node in root.iter('year'): # 仅遍历标签名为year的标签
    print(node.tag, node.text, node.attrib)

输出结果:

year 2008 {}

year 2011 {}

year 2011 {}

xml的常用操作

修改:

1
2
3
4
5
6
7
8
9
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml') # 读取xml文件,并以Element对象的形式保存
root = tree.getroot() # 获取根
for node in root.iter('year'): # 遍历year标签
    node.text = str(int(node.text) + 1) # 将year标签的值+1,注意,读出来的标签的值都是字符串形式,注意数据类型转换
    node.set('updated', 'yes') # 更新该标签
tree.write('test_2.xml') # 将结果写到文件,可以写到源文件也可以写到新的文件中

删除:

1
2
3
4
5
6
7
8
9
10
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml') # 读取xml文件,并以Element对象的形式保存
root = tree.getroot() # 获取根
for country in root.findall('country'): # 遍历所有country标签
   rank = int(country.find('rank').text) # 在country标签查找名为rank的纸标签
   if rank > 50: # 判断如果rank标签的值大于50
       root.remove(country) # 删除该标签
tree.write('test_3.xml')

说明:

iter方法用于查找的最终标签,也就是下面没子标签的标签,获取他的值和属性的

findall方法用于查找还有子标签的子标签,然后和用fandall返回的对象的find方法获取找到的标签的子标签


创建自己的xml文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import xml.etree.ElementTree as ET
new_xml = ET.Element("namelist") # 新建根节点,或者说xml对象
name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"}) # 给新xml对象创建子标签
age = ET.SubElement(name,"age",attrib={"checked":"no"}) # name标签在创建子标签age,attrib变量为属性
sex = ET.SubElement(name,"sex")
sex.text = '33' # 给标签赋值
name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
age = ET.SubElement(name2,"age")
age.text = '19'
et = ET.ElementTree(new_xml) #生成文档对象
et.write("test.xml", encoding="utf-8",xml_declaration=True) # 将xml对象保存到文件xml_declaration表示xml文档的声明
ET.dump(new_xml) #打印生成的格式


ConfigParser模块

ConfigParser模块是用来处理配置文件的包,配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容。常见很多服务的都是类似这种格式的,比如MySQL

假设我们有这样一个配置文件

[DEFAULT]
name www.qq.com
[dbs]
username root
passord 123.com
host 127.0.0.1

[server]
name www.baidu.com
port 80

读取配置文件

1
2
3
4
import configparser
config = configparser.ConfigParser() # 创建configparser对象
config.read('example.ini') # 读取配置件
print(config.sections()) # 获取所有的session

输出结果

['dbs', 'server']

注意:

可以看到这里没有输出DEFAULT,因为在Python中DEFAULT session有特殊用途,相当于所有session的默认值,也就是当DEFAULT中定义了一个key和value,此时session中这个不存在的时候,这个key的值就是DEFAULT定义的value

例如

1
print(config['dbs']['name'])

输出结果就是

www.qq.com

说明:

可以看到读取配置文件后的返回的对象有点类似于字典,可以通过key的方式将配置文件中的值一一取出来,甚至可以使用in关键字判断key是否存在

1
print('server' in config)

输出结果

True

其他常用操作

读:

1
print(config.options('dbs')) # 获取某个session下的所有option,也就是key

输出结果

['username', 'passord', 'host', 'name']

1
print(config.items('dbs')) # 获取某个session的键值列表,类似字典的items方法

输出结果

[('name', 'www.qq.com'), ('username', 'root'), ('passord', '123.com'), ('host', '127.0.0.1')]

1
print(config.get('dbs', 'host')) # 获取某个session下的某个option的值

输出结果

127.0.0.1

1
2
3
port = config.getint('server', 'port') # 获取某个session下的某个option的值,并以int的方式返回
print(port)
print(type(port))

类似的方法还有getfloat和getboolean方法,当然前提是配置文件中的值就是对应的类型,否则会报错

说明:

配置文件中yes、True、1、true等为真,也就是通过getboolean返回的是True,no、False、0、false等为假,也就是返回的是False


删除:

1
2
config.remove_option('dbs','host') # 删除option
config.remove_section('server') # 删除session






来自为知笔记(Wiz)


转载于:https://www.cnblogs.com/zhangxiaxuan/p/5222789.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache 设置404 页面_SpringBoot自定义错误页面

SpringBoot请求错误如404可能看到如下页面:有时可能需要自定义错误页面针对不同的http.status,如404/400。【1】解决方法① 注册错误页面如下所示:Componentpublic class ErrorPageConfig implements ErrorPageRegistrar { Override public void r…

Java 编程:如何提高性能?(简单总结篇)

2019独角兽企业重金招聘Python工程师标准>>> 开发者在编程中除了要有编程规范,还要注意性能,在 Java 编程中有什么提高性能的好办法呢? 本文转自国内 ITOM 行业领军企业 OneAPM Cloud Insight(一款能够优雅监控多种操作…

mysql没有开启binlog能恢复数据吗_神了!一个妹子 rm -rf 把公司整个数据库删没了......

经历了两天不懈努力,终于恢复了一次误操作删除的生产服务器数据。对本次事故过程和解决办法记录在此,警醒自己,也提示别人莫犯此错。也希望遇到问题的朋友能找到一丝灵感解决问题。01事故背景安排一个妹子在一台生产服务器上安装 Oracle&…

android手机活跃度,微信Android机型活跃度曝光,这个结果你满意吗?

原标题:微信Android机型活跃度曝光,这个结果你满意吗?在本周的第二届前端开发者大会上,由腾讯微信工程师公布了微信Android客户端机型前十的发布图,说的也是某款手机的存量跟用户活跃度的统计,在这张微信分…

postgresql9.4.4中文手册笔记-9.10 支持枚举函数

2019独角兽企业重金招聘Python工程师标准>>> 创建枚举类型 create type name as ENUM(zhao,qian,sun,li,zhou,wu, zheng,wang,cheng); 支持枚举函数 select enum_first(null::testenum); --查询枚举类型第一个元素 enum_first ------------zhao (1 row) select e…

.NET Framework源码研究系列之---Delegate

前言 曾几何时能看到微软产品的源码简直是天方夜谭,不过现在这却成了现实,微软终于对外开放了它的产品的源代码.抛去开源运动与微软之间的世代情仇,抛去微软这一做法的初衷,这总归是件好事,能够让我们拨开云雾,一窥优秀产品的秘密. 前两天看到有位仁兄在随笔中的留言,说他以为&…

如何设置多个图层层叠关系_如何玩转 XMind 中的多种思维结构?

熟悉 XMind 的用户都知道,XMind 支持多种思维结构,并且不同思维结构可以混用。每一个分支都可以是一个不同的结构,让你不受限制、自由地进行思维的发散和整理。这个是目前其他思维导图工具少有的。在 XMind 中,你可以用思维导图、…

python修改html表格,使用styles和css更改pandas dataframe html表python中...

这需要几个步骤:首先导入HTML并重新输入from IPython.display import HTMLimport re你可以通过to_html方法得到html pandas.df_html df.to_html()接下来,我们将为html表和我们要创建的样式生成随机标识符.random_id id%d % np.random.choice(np.arange(1000000))因…

PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择

2019独角兽企业重金招聘Python工程师标准>>> 这里是我在搭建php环境时收集的资料供大家参考: 现在PHP官网上下载PHP安装包都有VC11或VC9的字样,这是什么含义,我们应该下载哪种安装包更好呢?其实PHP官网给出了答案&…

Silverlight与WCF之间的通信(5)silverlight应用和wcf服务的发布方法

上一篇博文中有朋友问到关于silverlight程序发布的问题,上一篇写的是silverlight访问host在console上的wcf,其实关于wcf和silverlihgt通信的问题有好几种方式,这里列举了一下 客户端和服务端采用http协议通信(分两种,同…

小程序引用其他页面js_来聊聊小程序页面之间如何通信

小程序页面之间如何通信?首先将通信的模型列举出来, 分为以下几种兄弟页面间通信父路径页面向子路径页面通信子路径页面向父路径页面通信通信的方式localStorage 本地存储globalData 全局对象eventBus 发布订阅PageModel 缓存整个pageModel至globalDataLocalStorage利用onShow…

用碧海潮声制作的宋体(雅黑宋体)替换Windows7原生的火柴棍式的宋体

第一眼见到Windows7的时候,界面真的非常漂亮,但是当查看文件属性的时候,里面宋体出奇的难看,网上有很多在XP里替换宋体的方法,但是到了Windows7里就不那么好用了,经过多次查找相关方法,终于使用…

json动画_three.js动画(四)

ThreeJS的动画系列分为:基础动画、相机控制、变形动画、用骨骼和蒙皮制作动画以及使用外部模型创建动画。用骨骼和蒙皮制作动画用骨骼来做动画时,移动一下骨骼,Three.js必须决定如何相应地迁移附着在骨骼上的皮肤,一起来看吧~~~举…

session很快失效_一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~

前言公司有一个 Web 管理系统,使用 Tomcat 进行部署。由于是后台管理系统,所有的网页都需要登录授权之后才能进行相应的操作。起初这个系统的用的人也不多,为了节省资源,这个系统仅仅只是单机部署。后来随着用的人越来越多&#x…

定义动画名字html,CSS3 animation-name属性怎么用?

css3 animation-name属性是用来检索或设置对象所应用的动画名称,必须与keyframes配合使用,因为动画名称由keyframes定义 ;如果有多个属性值,可以用逗号进行分隔。css3 animation-name属性作用:animation-name 属性为 k…

线程中如何使用对象_多线程中如何使用gdb精确定位死锁问题

在多线程开发过程中很多人应该都会遇到死锁问题,死锁问题也是面试过程中经常被问到的问题,这里介绍在c中如何使用gdbpython脚本调试死锁问题,以及如何在程序运行过程中检测死锁。首先介绍什么是死锁,看下维基百科中的定义&#xf…

html中如何把两行合并单元格,css合并两列单元格内容

用纯DIVCSS做一个两行两列的表格,但第二列中两行怎么在html里把一行中的两列合并世界最不可以相信的话,就是从女人嘴里说出的话〃如上图,怎么做出上面图中的效果,分享大神详解CSS表格单元格占两行可以参考以下的代码: 单元格占两行…

ASP.NET MVC 实现二级域名(泛域名)

自从微软发布 ASP.NET MVC 和routing engine (System.Web.Routing)以来,就设法让我们明白你完全能控制URL和routing,只要与你的application path相结合进行扩展,任何问题都迎刃而解。如果你需要在所处的域或者子域处理数据标记的话&#xff0…

list和tuple

2019独角兽企业重金招聘Python工程师标准>>> list Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。 比如,列出班里所有同学的名字,就可以用一个list表示: >…

springboot数据源不正确_Spring MVC 到 Spring Boot 的简化之路

Spring全家桶笔记:SpringSpring BootSpring CloudSpring MVC​shimo.im01 背景从Servlet技术到Spring和Spring MVC,开发Web应用变得越来越简捷。但是Spring和Spring MVC的众多配置有时却让人望而却步,相信有过Spring MVC开发经验的朋友能深刻…