python之路--day17-shelve,xml和re模块

shelve模块

  shelve模块只有一个open函数,返回类似字典的对象,可读可写,key必须为字符串,而值可以是python所支持的数据类型

 1 import shelve
 2 # info1={'age':18,'height':180,'weight':80}
 3 # info2={'age':73,'height':150,'weight':80}
 4 #
 5 # d=shelve.open('db.shv')
 6 # d['egon']=info1
 7 # d['alex']=info2
 8 # d.close()
 9 
10 
11 # d=shelve.open('db.shv')
12 # # print(d['egon'])
13 # # print(d['alex'])
14 # d.close()
15 
16 #修改内容的时候,将 writeback = True才能修改
17 # d=shelve.open('db.shv',writeback=True)
18 # d['alex']['age']=10000
19 # # print(d['alex'])
20 # d.close()

 

 

xml模块

  xml是实现不同语言或程序之间的进行数据交换的协议,和json类型,但是json使用更简单

  xml是通过<>节点来区别数据结构

 1 <?xml version="1.0"?>
 2 <data>
 3     <country name="Liechtenstein">
 4         <rank updated="yes">2</rank>
 5         <year>2008</year>
 6         <gdppc>141100</gdppc>
 7         <neighbor name="Austria" direction="E"/>
 8         <neighbor name="Switzerland" direction="W"/>
 9     </country>
10     <country name="Singapore">
11         <rank updated="yes">5</rank>
12         <year>2011</year>
13         <gdppc>59900</gdppc>
14         <neighbor name="Malaysia" direction="N"/>
15     </country>
16     <country name="Panama">
17         <rank updated="yes">69</rank>
18         <year>2011</year>
19         <gdppc>13600</gdppc>
20         <neighbor name="Costa Rica" direction="W"/>
21         <neighbor name="Colombia" direction="E"/>
22     </country>
23 </data>
xml格式

 xml协议在各个语言里都是支持的,在python中可以用以下模块操作xml:

import xml.etree.ElementTree as ET

tree = ET.parse('a.xml')
root = tree.getroot()

三种查找方式:

 # res=root.iter('rank') # 会在整个树中进行查找,而且是查找到所有
 # for item in res:
 # # print(item)
 # print('='*50)
 # print(item.tag) # 标签名
 # print(item.attrib) #属性
 # print(item.text) #文本内容


# print(root.find('country')) #在root的子节点找,只找一个
# print(root.findall('country')) #在root的子节点找,找所有

修改:使用set方法
删除:使用remove方法

 

 

re模块

  正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法

  常用匹配模式(元字符)

\w 匹配字母数字和下划线
print(re.findall('\w','abc123_=+)(*&^%'))
['a', 'b', 'c', '1', '2', '3', '_']
\W 匹配非字母数字下划线
print(re.findall('\W','abc123_=+)(*&^%'))
['=', '+', ')', '(', '*', '&', '^', '%']
\s 匹配任意空白字符,等价于【\t\n\r\f】
print(re.findall('\s','\nabc\t12\r3_=+)(*&^%'))
['\n', '\t', '\r']
\S 匹配任意非空字符
print(re.findall('\S','\nabc\t12\r3_=+)(*&^%'))
['a', 'b', 'c', '1', '2', '3', '_', '=', '+', ')', '(', '*', '&', '^', '%']
\d 匹配任意数字,等价于【0-9print(re.findall('\d','\nabc\t12\r3_=+)(*&^%'))
['1', '2', '3']
\D 匹配任意非数字
print(re.findall('\D','\nabc\t12\r3_=+)(*&^%'))
['\n', 'a', 'b', 'c', '\t', '\r', '_', '=', '+', ')', '(', '*', '&', '^', '%']
\A 匹配字符串开始
print(re.findall('\Aabc','abc123_abc=+)(*&^%abc'))
['abc']
####这个方法不建议使用 使用^
^ 匹配字符串的开头
print(re.findall('^abc','abc123_abc=+)(*&^%abc'))
['abc']
\Z 匹配字符串结束,如果存在换行,值匹配到换行前的结束字符串
print(re.findall('abc\Z','abc123_abc=+)(*&^%abc'))
['abc']
####这个方法不建议使用,,,使用$
$ 匹配字符串的末尾
print(re.findall('abc$','abc123_abc=+)(*&^%abc'))
['abc']
   .  匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
只能匹配一个字符
print(re.findall('a.c','abc123_a\nc=+)(*&^%abc')) ['abc', 'abc']
 ? 代表左边的那一个字符重复0次或1次
print(re.findall('ab?','abc123_a\nc=+)(*&^%abc'))
['ab', 'a', 'ab']
 * 代表左边那一个字符出现0次或无穷次
print(re.findall('ab*','abbbbbc123_a\nc=+)(*&^%abbbc'))
['abbbbb', 'a', 'abbb']
 +  代表左边那一个字符出现1次或无穷次
print(re.findall('ab+','abbbbbc123_a\nc=+)(*&^%abbbc'))
['abbbbb', 'abbb']
{m,n} 代表左边那一个字符出现m次到n次
print(re.findall('ab{0,1}','abbbbbc123_abc=+)(*&^%abbbc'))
['ab', 'ab', 'ab']
 .*  匹配任意长度,任意的字符------贪婪匹配(匹配最远的)
print(re.findall('a.*c','abbbbbc123_abc=+)(*&^%abbbc'))
['abbbbbc123_abc=+)(*&^%abbbc']
 .*?  匹配任意长度,任意字符----非贪婪匹配
print(re.findall('a.*?c','abbbbbc123_abc=+)(*&^%abbbc'))
['abbbbbc', 'abc', 'abbbc']
():分组,按照规则匹配,但是只保留()里面的内容
print(re.findall('a.*?(c)','abbbbbc123_abc=+)(*&^%abbbc'))
['c', 'c', 'c']
 []   匹配一个指定范围内的字符(这个字符来自于括号内定义的)
print(re.findall('a[0-9][0-9]c','a1c a+c a2c a9c a11c a-c acc aAc'))
['a11c']当 - 需要被当中普通符号匹配时,只能放到[]的最左边或最 右边
print(re.findall('a[-+*]c','a1c a+c a2c a9c a*c a11c a-c acc aAc'))[]内的^代表取反的意思
print(re.findall('a[^0-9]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc'))
 |  或者   匹配|左边或者右边的内容
print(re.findall('compan(ies|y)','Too many companies have gone bankrupt, and the next one is my company'))
['ies', 'y'](?:):代表取匹配成功的所有内容,而不仅仅只是括号内的内容
print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next one is my company'))
['companies', 'company']

 

re模块的方法

  re.findall('e','alex make love') 

      #['e', 'e', 'e'],返回所有满足匹配条件的结果,放在列表里

  re.search('e','alex make love').group()

                #e,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

  re.match('e','alex make love')

        #None,同search,不过在字符串开始处进行匹配,完全可以用search+^代替match

  re.split('[ab]','abcd')

      #['', '', 'cd'],先按'a'分割得到''和'bcd',再对''和'bcd'分别按'b'分割

  re.sub('a','A','alex make love')

      #Alex mAke love,不指定n,默认替换所有

  re.sub('a','A','alex make love',1)

         #指定n,则替换n次  Alex make love

  re.sub('^(\w+)(.*?\s)(\w+)(.*?\s)(\w+)(.*?)$',r'\5\2\3\4\1','alex make love')

      #love make alex   按照顺序替换

  pattern=re.compile('alex') #将正则赋值给一个变量,再次使用直接调用变量名   

      pattern.findall('alex is alex alex')
      pattern.findall('alexasdfsadfsadfasdfasdfasfd is alex alex')

      

转载于:https://www.cnblogs.com/guodengjian/p/8759636.html

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

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

相关文章

20172314 2018-2019-1《程序设计与数据结构》第一周学习总结

教材学习内容总结 概述 软件工程&#xff1a;是一门关于高质量软件开发的技术和理论的学科&#xff0c;用来控制开发过程&#xff0c;实现高质量的软件。软件工程的目标&#xff1a;正确性、可靠性、健壮性、可用性、可维护性、可重用性、可移植性、运行效率。 对于可靠性和健壮…

activiti api文档_【白银人机】Activiti 工作流从入门到入土:完整 hello world 大比拼(API 结合实例讲解)...

点击上方“好好学java”&#xff0c;选择“置顶”公众号重磅资源、干货&#xff0c;第一时间送达重磅推荐 ① 纯福利 | 公众号资源大汇总&#xff0c;一年才一次&#xff01;② 重磅&#xff01;&#xff01;2018年Java全套入门到进阶学习视频及项目实战③ 2018年java架构师学习…

前端解读控制反转(IOC)

前言 随着前端承担的职责越来越重&#xff0c;前端应用向着复杂化、规模化的方向发展。大型项目模块化是一种趋势&#xff0c;不可避免模块之间要相互依赖&#xff0c;此外还有很多第三方包。这样的话如何去管理这些繁杂的文件&#xff0c;是一个不可避免的话题。此时作为一种…

ASP.NET MVC传递参数(model), 如何保持TempData的持久性

一看到此标题&#xff0c;相信你也会。因为路由是可以从URL地址栏传过去的。但是Insus.NET不想在地址栏传递&#xff0c;还是一个条件是jQuery的Ajax进行POST的。Insus.NET不清楚别人是怎样处理的&#xff0c;但是这个让Insus.NET花上不少时间来解决。Insus.NET实现的方法也很简…

深度学习语音降噪方法对比_人工智能-关于深度学习的基础方法

深度学习概述深度学习的一些简介&#xff0c;其要点如下&#xff1a;深度学习实际上是基于具有多个隐藏层的神经网络的学习&#xff1b;深度学习的思想来源于人类处理视觉信息的方式&#xff1b;深度学习的发展得益于数据的井喷和计算力的飙升&#xff1b;深度学习的理论基础依…

通过adb巧用monkey获取android设备中所有应用的主activity

由于工作需要&#xff0c;想获取所有应用的activity(这里仅限应用的主入口Launcher activity)&#xff0c;搜索了一下&#xff0c;网上实现的方案都是基于android编程实现的&#xff0c;对于不懂开发的测试来说稍有难度&#xff0c;而且对于PC端测试工具来说可行性略差。 给大家…

PWA · 前后端协作 · Node | JTalk 掘金线下活动第七期

通知 余票仅剩 3张&#xff0c;欢迎加入活动群获取更多通知。北京的小伙伴可以关注我们的 JTalk 第八期&#xff1a;前端安全 | 美团点评技术团队专场 ? 报名 扫码报名&#xff1a; 报名链接&#xff1a;点我报名 ? 介绍 本期 JTalk 来杭州啦&#xff01; 掘金线下活动 J…

指数函数中x的取值范围_基本初等函数I: 指数函数、对数函数和幂函数

本文大约4800字, 建议学习时间1个小时.在学习过一次函数和二次函数(修改版)后, 我们知道, 一次函数ykxb当一次项系数k大于零时是增函数, 小于零时是减函数. 二次函数yax2bxc当二次项系数a大于零时图象沿x轴从左向右先减后增, a小于零时先增后减. 可以想象, 次数更高的函数, 在定…

Linux系统之TroubleShooting(启动故障排除)

尽管Linux系统非常强大&#xff0c;稳定&#xff0c;但是我们在使用过程当中&#xff0c;如果人为操作不当&#xff0c;仍然会影响系统&#xff0c;甚至可能使得系统无法开机&#xff0c;无法运行服务等等各种问题。那么这篇博文就总结一下一些常见的故障排除方法&#xff0c;但…

皮肤可配置化:变量、样式分离

之前皮肤开发了一个版本&#xff0c;抽是抽出来了&#xff0c;但是变量只抽出了几个颜色&#xff0c;没什么价值&#xff08;上个版本开发过程&#xff09;&#xff0c; 这次我又进行了一次迭代&#xff0c;现在是一个较成熟的版本了。整体理一下思路&#xff0c;可以总结为3步…

【考试记录】4.8 Path (网络流 —— 劲题)

手抄代码 学习指针 冥思苦想一晚上终于——在一瞬间开窍了。果然题目都是这样&#xff1a;突破了一个点&#xff0c;一切都是柳暗花明。 题面描述&#xff1a; 样例&#xff1a; 这道题目&#xff0c;首先注意到给定的边的性质&#xff1a;这些边在平面上构成了一棵树&#x…

Servlet 3.0概述

Servlet 3.0 –具有许多突破性的功能&#xff0c;这些功能最终将改变开发人员编写和编写JEE Web应用程序的方式–有人可能会说&#xff0c;它的约定违背了我们对事物在理论上“应该”如何工作的大多数理解&#xff0c;但这就是其中之一。创新和持续改进&#xff1b; 挑战公约并…

MySQL(介绍,安装,密码操作,权限表)

一、数据库介绍1、数据库相关概念a、支持并发b、锁的问题c、对客户端请求进行认证d、存取效率&#xff08;降低IO次数&#xff09;数据库服务器&#xff08;本质就是一个台计算机&#xff0c;该计算机之上安装有数据库管理软件的服务端&#xff09;数据库管理管理系统RDBMS&…

matlab如何测两点的角度_【邢不行|量化小讲堂系列01-Python量化入门】如何快速上手使用Python进行金融数据分析...

引言:邢不行的系列帖子“量化小讲堂”&#xff0c;通过实际案例教初学者使用python进行量化投资&#xff0c;了解行业研究方向&#xff0c;希望能对大家有帮助。【历史文章汇总】请点击此处【必读文章】&#xff1a;【邢不行|量化小讲堂系列27-Python量化入门】EOS期现套利&…

结对项目

一、【Coding.Net项目地址】https://git.coding.net/verde/Pair_Work.git 二、【对接口进行的设计】 看教科书和其它资料中关于Information Hiding, Interface Design, Loose Coupling的章节&#xff0c;说明你们在结对编程中是如何利用这些方法对接口进行设计的。 如下图SRC的…

国家开放大学形成性考核 统一资料 参考试题

试卷代号&#xff1a;1174 水工钢筋混凝土结构&#xff08;本&#xff09;参考试题 一、选择题&#xff08;每小题2分&#xff0c;共20分&#xff0c;在所列备选项中&#xff0c;选1项正确的或最好的作为答案&#xff0c;将选项号填入各题的括号中&#xff09; 1.钢筋混凝土结…

两个向量之间的夹角公式_向量的内积

向量的内积也叫向量的数量积、点积。我们定义两个向量的内积是一个数: 其中 是这两个向量的夹角。 对于向量的内积,最重要的一个结论是: 定理1:两向量垂直的充分必要条件是它们的内积为 0,即 这个定理我们几乎不用证明了,因为从定义来看,如果两个向量都不零向量,则只能…

springcloud 入门 10 (eureka高可用)

eureka高可用: 说白了&#xff0c;就是加一个实例作为原实例的备份&#xff0c;然后一起对外提供服务。这样可以保证在一台机器宕机的时候&#xff0c;整个系统不会死掉。保证其继续对外服务。 eureka的集群化&#xff1a; 服务注册中心Eureka Server&#xff0c;是一个实例&am…

为什么REST如此重要

这篇文章致力于REST&#xff0c;一种塑造Web服务的体系结构风格&#xff0c;以及IT历史上最容易被误解的概念。 这篇文章针对的是那些正在设计Web服务api的人&#xff0c;他们并未完全了解REST的实际含义。 我想给你个主意。 这篇文章也发给了那些想知道REST意味着什么的人&…

你真的懂js获取可视区宽高吗

可能你会觉得获取可视区宽高不是很简单吗 原生js获取高度不就是就window.innerHeight一句话的事&#xff0c;可是真的这么简单吗 来看个测试页面,如果页面带有横向纵向的滚动条&#xff0c;我们打印出各个高度进行查看对比 顺便你也可以看看document.body和document.documentEl…