1.  xml模块

xml模块
tree = ElementTree.parser("文件")
root = tree.getroot()
# 查
root.iter/find/findall
# 增
root.append(标签对象)
# 删
root.remove(标签对象)
修改
root.text = "新值"
root.tag = "新名字"
root.set("key","value")
tree.write()

 

XML:可扩展标记语言

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

<tag></tag>双标签

<tag/>单标签,没有文本一般用于设计文档结构,例如换行等  </r>表示换行

 

<tag style="color:red" age="18">12345</tag>

一个标签分为三个部分:

tag是标签名称

12345是文本内容  text

name = "jack" 是标签的属性

其他的规范
1.又开始就必须有结束
2.所有属性值必须包含在双引号里面
3.只能有一个根标签 (最外层只能有一个标签)
4.开始标签和结束标签的顺序是相反的  最先打开谁 就最后关闭谁  最后打开的最先关闭
文档声明可不写 主要是告诉浏览器 该怎么解析这个文件
xml模块是自带的 不需要安装

与json的区别
    xml 是一种可扩展的标记语言
    可以高度自定义文档的结构 数据类型 标签的含义等等
    所以扩展性远比JSON要强

    json更加适用于 前后台数据交换  优点 轻量级  跨平台 语法简洁
    xml更多用来作为配置文件 当然 python不太常用
    html就是一种xml

 

xml的用法

1. 查

<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.1 获取标签root.iter/find/findall

import xml.etree.ElementTree as ET

# 打开一个文档,得到一个元素树(XML文档)
tree = ET.parse("test.xml")
# 获取根标签
root = tree.getroot()
# print(root)               # <Element 'data' at 0x000001F105CF5958>

# 遍历出root标签的所有子标签
for tag in root:
    print(tag)

# iter()
    # 如果没有参数则查找所有标签
    # 如果有参数则查找所有名字匹配的标签
    # 查找范围 为全文
for tag in root.iter():
    print(tag)

for tag in root.iter("country"):
    print(tag)

# find()
#     必须给参数
#     查找当前标签的子标签  返回第一个名字匹配的
country = root.find("country")
print(country)

# findall()
#     必须给参数
#     查找当前标签的子标签  返回所有名字匹配的(返回为列表类型)
countrys = root.findall("country")
print(countrys)

 

1.2 获取标签的标签名(.tag)、属性(.attrib)、文本(.txt)

import xml.etree.ElementTree as ET
# 获得元素树
tree = ET.parse("test.xml")
# 得到根标签
root = tree.getroot()
# 获得所有的子标签
countrys = root.findall("country")
for current_msg in countrys:
    print(current_msg.tag)  # 查找当前标签的名称
    print(current_msg.attrib) # 获得标签的所有属性
    # print(current_msg.text)    # 获得标签的文本内容

for inner_msg in countrys:
    print("%s的邻居如下:" % inner_msg.attrib.get("name"))
    for n in inner_msg.findall("neighbor"):
        print(n.attrib.get("name"))
    print("更新时间:%s" % inner_msg.find("year").text)
    print("==============")

2.  增

# 添加书签
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element
tree = ET.parse("test.xml")
root = tree.getroot() # type:# Element
# 创建需要被添加的子标签
new_tag = Element("ThisIsNewTag")
new_tag.text = "123" # 设置文本内容
root.append(new_tag) # 添加到root下
tree.write("test1.xml")    # 写入的内容 <ThisIsNewTag>123</ThisIsNewTag>

3.  删

# 删 将test.xml所有的gdppc删除
# remove函数,需要一个标签作为参数,即要被删除的标签,然后只能由父标签来删除子标签
import xml.etree.ElementTree as ET
tree = ET.parse("test.xml")
root = tree.getroot()
for countrys in root.iter("country"):
    gdppc = countrys.find("gdppc")
    if gdppc != None:
        countrys.remove(gdppc)
tree.write("test2.xml")

 

4.  改

# 改 将test.xml中所有的year标签的text加1
import xml.etree.ElementTree as ET
tree = ET.parse("test.xml")
root = tree.getroot()
for year in root.iter("year"):
    year.text = str(int(year.text) + 1)
tree.write("test3.xml")

 

5.  创建xml文档

# 用代码生成一个xml文件
import xml.etree.ElementTree as ET
# 创建标签
tag = ET.Element("data123")
tag.text = "12345"
tag.set("name","jack")
# 创建一个元素树,并把tag添加到上面
tree = ET.ElementTree(tag)
tree.write("data.xml")     # <data123 name="jack">12345</data123>

 

2.  面向对象编程

1.面向对象是什么?
2.面向对象与面向过程的优缺点对比 以及使用场景对比
3.什么是对象 什么是类
4.类和对象的关系
5.如何定义一个类
6.如何创建对象
7.属性的访问顺序
8.类和对象的名称空间是独立的

 

面向对象编程是一种编程思想

对象:具备某种特征与行为的具体存在的集合体

 

2.1 面向对象(对扩展性要求较高的程序):

优点:不需要关注具体细节,可以更好的关注业务逻辑,扩展性提高,维护性高,复用性高

缺点:程序需要先设计,结构更发杂,无法准确预知执行结果,编码复杂度提高

 

2.2 面向过程(对扩展性要求较低的程序):

优点:发杂问题简单化,流程化

缺点:牵一发动全身,维护性差

 

2.3 类与对象的关系:

类:某些具备相同特征和相同行为的集合体(是一种抽象的概念)

在生活中:现有对象,后有类

在代码中:先有类,后有对象(需要提高告诉计算机这个对象是什么样的,具有什么样的功能)

 

2.4 如何定义一个类

适应class关键字

类型用大驼峰命名法(所有单词首字母大写)

描述特征使用变量(属性)

描述技能使用函数(方法)

# 类的定义
class Student:
    # 描述特征使用变量(属性)
    school = "oldboy"
    # 描述技能使用函数(方法)
    def say_hi(self):
        print("say hi")
    # class中的代码仅在第一次加载时执行
    print("running...")  # 类体代码会在类定义阶段立即执行
print(Student.school)    # oldboy
print(Student.say_hi)    # <function Student.say_hi at 0x0000024F1056A9D8>
Student.say_hi(123)      # say hi

 

 

2.5 对象的使用

# 对象的使用
class Person:
    country = "China"
    def eat(self):
        print("eatting")
p1 = Person()
print(p1.country)

# 为对象增加属性
p1.name = "张三"    # China
print(p1.name)      # 张三

# 对p1对象单独添加country
p1.country = "USA"

# 在访问时优先访问自己名称空间的内容,如果找不到,会自动找到类中的属性
print(p1.country)        # USA
print(Person.country)    # China

# 每个对象都会存储自己类的地址,可以使用__class__来访问
print(p1.__class__)     # <class '__main__.Person'>
print(type(p1))         # <class '__main__.Person'>

# 查找名称空间的内容,类与对象的名称空间是对立的
print(p1.__dict__)       # {'name': '张三', 'country': 'USA'}
print(Person.__dict__)   # {'__module__': '__main__', 'country': 'China', 'eat': <function Pers...
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄