复习     1.configparser解析配置文件 1.1.创建解析对象 c=configparser.ConfigParser c.read("文件") c.get("分区","选项")   2.subprocess子进程 开启进程是为了让完成某项任务 进程间都是相互独立 不能直接交换数据需要交换管道 管道是用于进程间通讯的 out输出管道 in输入管道 err错误输出管道   3.表格处理xlrd|xlwt 3.1xlrd读取表格数据****** 3.1.1.打开一个文档 open_workbook(文件路径) 3.1.2获得一个sheet workbook.sheet_by_index/name 3.1.3sheet.cell/row/col 获取行数nrows和列数ncols 3.2xlwt写入数据到表格 了解即可     今日内容 xml模块 面向对象概念 类(class:属性即特征) 对象(函数:技能即方法)   1.xml模块 1.1XML全称:可扩张标记语言 1.1.1基本概念认知 <tag></tag>  双标签 <tag/>  单标签 没有文本 一般用于文档结构  <tr/>表示换行   1.1.2标签的组成: <tag style="color:red" age="18">12345</tag> 一个标签的完整组成 有三部分: tag 是标签名称 12345 是文本的内容 text style="color:red" 是标签的属性     1.2.其他规范: 1.2.1.有开始就必须有结束 1.2.2.所有属性值必须包含在双引号里面 1.2.3.只有一个根标签,(最外层只能有一个标签) 1.2.4.开始标签和结束标签的顺序是相反的 最先打开谁 就最后关闭谁 最后打开的最先关闭 1.2.5.文档声明可以不写 主要是告诉浏览器 该怎么解析这个文件 注意:xml模块是自带的不需要安装   1.3与joson的区别        1.3.1 xml是一种可扩展的标记语言          特征:(属性)——>因为               可以高度自定义文档的结构 数据类型 标签的含义等等            所以可扩展性远比json强         用途:xml更多用来作为配置文件 当然python不太常用                  html就是一种xml        1.3.2json更适合于前后台数据交换            优点 :                 轻量级 跨平台 语法简洁           用途:传输  1.4代码实操: 1.4.1导入模块: import xml.etree.ElementTree as ET #import xml.etree.ElementTree正常导入#as ET起别名   1.4.2#打开一个文档 得到一个元素树(XML文档) tree = ET.parse("test1.xml")   1.4.3# 获取根标签 root = tree.getroot()   1.4.4# 遍历出root标签的所有子标签 # for tag in root:    # print(tag)    1.4.5 # 遍历出文档中所有标签 # for tag in root.iter():       # print(tag))   1.4.6 # 从root下查找第一个名字为country的子标签 # country = root.find("country")   # print(country)   1.4.7 # 从root下查找所有名字为country的子标签 # countrys = root.findall("country") # print(countrys)   1.4.8 # 从root下查找所有名字为country的子孙标签 # for tag in root.iter("country"):         # print(tag)   1.5解析xml得到一个tree对象后 查找标签的4种方式   1.5.1.iter()   1.6案列:   文件:text1.xml <data>     <country name="Liechtenstein">123<rank updated="yes">2</rank>         <year>2010</year>         <gdppc>141100</gdppc>         <neighbor direction="E" name="Austria" />         <neighbor direction="W" name="Switzerland" />         <country>123</country>     </country>     <country name="Singapore">         <rank updated="yes">5</rank>         <year>2013</year>         <gdppc>59900</gdppc>         <neighbor direction="N" name="Malaysia" />     </country>     <country name="Panama">         <rank updated="yes">69</rank>         <year>2013</year>         <gdppc>13600</gdppc>         <neighbor direction="W" name="Costa Rica" />         <neighbor direction="E" name="Colombia" />     </country> </data> 1.6.2.获取某个标签的详细内容.py——查 做法: import xml.etree.ElementTree as ET tree = ET.parse("test1.xml") root = tree.getroot() # 找到所有的country标签 es = root.findall("country") # 获取某个标签的 标签名 属性 以及文本 # for e in es: #     print(e.tag) # 标签名称 #     print(e.attrib) # 标签的所有属性 返回一个字典 #     print(e.text) # 标签的文本内容 #获取所有国家的 邻居的名称 # for c in es: #     print("%s的邻居如下:" % c.attrib.get("name")) #     for n in c.findall("neighbor"): #         print(n.attrib.get("name")) #     print("更新时间:%s" % c.find("year").text) #     print("===================================") 1.6.3.修改标签的某个属性.py import xml.etree.ElementTree as ET from xml.etree.ElementTree import Element # tree = ET.parse("test.xml") # root = tree.getroot() # # 修改文本 # root.text = "这是跟标签的文本" # # 修改属性 没有则添加 有则覆盖 # root.set("name","jack") # # 修改标签名字 # root.tag = "data" # tree.write("test2.xml",encoding="utf-8",xml_declaration=True) # 把test1.xml 中所有year标签的text加1 # tree = ET.parse("test1.xml") # root = tree.getroot() # for e in root.iter("year"): #     e.text = str(int(e.text) + 1) # tree.write("test1.xml") 1.6.4# 把test1.xml 中所有gdppc删除 # remove 函数 需要一个标签作为参数 即要被删除的标签   然后只能有父标签来删除子标签 # tree = ET.parse("test1.xml") # root = tree.getroot() # for c in root.iter("country"): #     gdppc = c.find("gdppc") #     if gdppc != None: #         c.remove(gdppc) # tree.write("test4.xml") 1.6.5# 添加标签--贴加标签 tree = ET.parse("test1.xml") root = tree.getroot() # type:Element # 创建需要被添加的子标签 new_tag = Element("ThisIsNewTag") new_tag.text = "123" # 设置文本 root.append(new_tag) # 添加到root下 tree.write("test5.xml") # 写入文件 4.代码生成xml文档.py import xml.etree.ElementTree as et # 创建标签 tag = et.Element("data") 2.1.1.面向过程编程思想     关注的点就是完成任务的过程 """ 使用class关键字来定义一个类 类名称为大驼峰命名法 所有单词首字母大写 小驼峰 第一个单词首字母小写 """ # class ClassName: #     pass class Student:     # 描述特征使用变量 (属性)     school = "olbBoy"     # 描述技能使用函数 (方法)     def say_hi():         print("hello i am tiger")     # class中的代码仅在第一次加载时执行     print("test...")     pass # print(Student.say_hi) Student.say_hi() print(Student.school) # Student.say_hi() # 调用类来获得一个对象 # stu1 = Student() # stu1.say_hi() 2.3.2.对象的使用.py class Person:     country = "china"     def eat(self):         print("正在吃面...") p1 = Person() # print(p1) # print(Person) # print(p1.country) # p1.eat() # 为对象增加了属性 p1.name = "张三" print(p1.name) # 给p1对象单独添加了country p1.country = "USA" # 在访问时优先访问自己名称空间的内容 如果找不到 会自动找类中的属性 print(p1.country) print(Person.country) # 每个对象都会存储自己所在类的地址 可以使用__class__来访问 print(p1.__class__) print(type(p1)) # 查看名称空间中的内容 print(p1.__dict__) print(Person.__dict__) 总结:  今天讲到的知识点 xml模块 tree=ElemenTree.parser("文件") root=tree.gretroot() #增 root.append(标签对象) #删 root.remove(标签对象) #修改 root.text="新值“ root.tag="新名字" root.set("key","value") tree.write() #查 root.iter/find/findall     面向对象 1.什么是面向对象? 2.面向对象与面向过程的优缺点对比以及场景对比 3.什么是对象?什么是类? 4.类和对象的关系 5. 如何定义一个类 6.如何创建对象 7.属性的访问顺序 8.类和名称空间是独立