day_23常用模块之xml | 面向对象
首先XML是可扩展标记语言
双标签 < tag>中间是文本<tag>
单标签 <tag/> 没有文本 一般用于设计文档结构,例如换行等
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。<tr/> 是表示换行
<tag style="color:red" age="18">12345</tag>
一个标签的完整组成 有三个部分:
tag是标签名称,
12345是文本内容 text
name = "jack" 是标签的属性
还有其他的一些规范
1:又开始就必须有结束
2:所有属性值必须包含在双引号里面
3:只能有一个根标签,(最外层只能有一个标签)
4:开始标签和结束标签的顺序是相反的,最先打开谁谁就最后被关闭 最后打开的先关闭
5:文档声明可以不写,只要告诉浏览器该怎么解析这个文件
与json的区别
xml是一种可扩展的标记语言
可以自定义文档的结构,数据类型,标签的含义等等
所以扩展性远比json要强
json更加适用于前后台数据交换, 优点 是轻量级. 跨平台 语法简洁
xml更多用来作为配置文件, 在python里不常用
html就是一种xml
然后是使用xml
import xml.etree.ElementTree as ET
#打开一个文档,得到一个元素树,(就是xml文档对象)
tree=ET.parse("文件路径")
#获取根标签对象
root=tree.getroot()
解析xml得到一个根标签对象后,查找标签的4种方式
1:iter()
查找的范围是所有的标签
如果没有参数则查找所有标签
如果有参数则查找所有名字匹配的标签
2:find()
必须给参数
查找当前标签的子标签.返回第一个名字匹配的
3:findall()
必须给参数
查找当前标签的子标签,返回所有名字匹配的
4:直接直接遍历某个标签
返回的是这个标签的所有子标签
获取标签的某个详细内容
#获取标签名称
root.tag
#获取标签的所有属性
root.attrib 返回的是一个字典
root.text 获取标签的文本内容
修改标签的某个属性
# 修改文本
root.text="新文本"
#修改属性
root.set("name","jack") 有name这个属性了就覆盖,没有则添加
#修改标签名字
root.tag = "data"
tree.write("test.xml") #写入到文件
#删除某个标签
remove函数,需要一个被删除的标签作为参数.只能由父标签 来删除子标签
tree.write("test.xml") #写入到文件
添加标签
#先创建一个需要被添加的子标签
new_tag=ET.Element("this_is_new_tag")
#设置文本
new_tag.text="123456"
root.append(new_tag) #把新创建的标签添加到root下
tree.write("test.xml") #写入到文件
最后是代码生成xml文档
首先创建标签
tag=ET.Element("data")
#设置文本
tag.text="123456"
#设置属性
tag.sat("name","jack")
#创建一个元素树,并把tag添加到上面
tree= ET.ElementTree(tag)
#写入文件
tree.write("test.xml")
面向对象
首先面向过程的编程思想
关注的点就是完成任务的过程
第一步
第二步
一步一步按照固定的顺序来完成任务
是一种机械化的思维,就像一条流水线.制定流水线只能生产制定产品
缺点:
牵一发而动全身 扩展性非常低,可维护性差
优点:
将复杂的事情,简单化,并流程化
应用场景:
对扩展要求较低的程序
系统内核,shell脚本,计算器啥的
面向对象优点:
不需要在关注具体的实现细节 可以更好的关注业务逻辑
扩展性提高了,维护性高,复用性高
缺点:
对比面向过程而言.程序需要先设计,结构更复杂,编程复杂度提高了
无法准确预知执行结果
应用场景:
对于扩展性要求较高的应用程序
qq,微信,王者荣耀
面向对象是一种编程思想,让你不需要关心具体实现细节,而是关注对象
优点:扩展性高,复用性,维护性
什么是对象?
万事万物都是对象
对象:具备某种特征与行为的集合体并且是具体存在的就称之为对象
类: 某些具备相同特征和相同行为的集合体 ,是一种抽象概念 类型==类
人,动物
特征==属性
行为==技能
对象和类的关系
在生活中 先有对象 再有类
在代码中 必须现有类 才能产生对象 (因为你需要提前告诉计算机这个对象是什么样的有什么技能)
使用class关键字来定义一个类
类名使用大驼峰命名法
所有单词首字母大写
小驼峰.第一个单词首字母小写.其他的首字母大写
class ClassName:
pass
面熟特征使用变量,(属性)
school = "oldboy"
描述技能使用函数(方法)
def say_hi():
print("hello world")
#class中的代码仅在第一次加载时执行
因为创建类就是创建了一个名称空间, 创建对象就是再创建一个名称空间 并与之类关联
执行一次 就创建了一个名称空间,下次再次执行就直接去名称空间找了
用类名加括号 返回的是一个对象
stu_obj=Student()
#为对象添加属性 只在当前对象可以访问到
stu_obj.name="jiux"
对象访问属性或方法时 优先访问自己名称空间的内容.如果找不到 就会自动找类中的属性
因为每个对象都会存储自己所在类中的地址,可以使用__class__来访问
查看名称空间中的内容是用__dict__
