zoukankan      html  css  js  c++  java
  • python23 xml模块 面向对象的概念:类;对象

      

    复习

     

     

    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.5.2.find()
        必须给参数
        查找当前标签的子标签  返回第一个名字匹配的
       
    1.5.3.findall()
        必须给参数
        查找当前标签的子标签  返回所有名字匹配的

    1.5.4.直接遍历某个标签
        返回的是这个标签的所有子标签 

     

    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")
    tag.text = "123"
    tag.set("name","jack")

    # 创建一个元素树 并把tag添加到上面
    tree = et.ElementTree(tag)
    tree.write("test6.xml")




    2.面向对象编程概念

    2.1.面向对象
    2.1.1.面向过程编程思想

    关注的点就是完成任务的过程
    第一步
    第二步
    一步一步按照固定顺序来完成任务
    是一种机械化的思维,就像一条流水线,指定流水线只能生产指定产品
    缺点:
    牵一发而动全身 扩展性非常低,可维护性差
    优点:
    将复杂的事情,简单化,并流程化
    应用场景:
    对扩展要求较低的程序
    系统内核,shell脚本,计算器啥的


    2.1.2面向对象编程
    是一种编程思想
    面向:朝着 向着
    对象是什么
    面向对象关注点是对象,把你的思维角度从具体操作这 变成了一个指挥者
    例如把大象装进冰箱
    1.打开冰箱
    2.塞入大象
    3.关闭冰箱
    以上就是典型面向过程思想
    换成面向对象
    找一个具备装大象这个技能的对象 然后命令它装大象

    注意:对象不是凭空产生的 需要我们自己先设计对象 然后在使用它们

    2.1.3.面向对象优点:
    不需要在关注具体的实现细节 可以更好的关注业务逻辑
    扩展性提高了,维护性高,复用性高
    缺点:
    对比面向过程而言.程序需要先设计,结构更复杂,编程复杂度提高了
    无法准确预知执行结果
    应用场景:
    对于扩展性要求较高的应用程序
    qq,微信,王者荣耀


    面向对象是一种编程思想,让你不需要关心具体实现细节,而是关注对象
    优点:扩展性高,复用性,维护性


    2.2什么是对象?

    万事万物都是对象

    2.2.1对象:具备某种特征与行为的集合体并且是具体存在的就称之为对象
    如来佛祖,owen
    类: 某些具备相同特征和相同行为的集合体 ,是一种抽象概念 类型==类
    人,动物,狗,老男孩的老师

    特征==属性
    行为==技能


    2.2.2对象和类的关系
    在生活中 先有对象 再有类
    在代码中 必须现有类 才能产生对象 (因为你需要提前告诉计算机这个对象是什么样的有什么技能)

    编程思想不是某一个具体语言或技术 ,
    面向对象的语言:
    python,Java,C++,C#
    面向过程:
    C,ruby


    2.3.1.类的使用.py

    """
    使用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.类和名称空间是独立

  • 相关阅读:
    Linux五种IO模型
    怎样理解阻塞非阻塞与同步异步的区别?
    .NET 框架 (转载)
    数组 反转
    排序 归并排序&逆序对
    快速寻找满足条件的2个数
    数组 寻找最大的第k个数
    字符串 删除字符串开始以及末尾的空白符,并把数组中间的多个空格(如果有)符转换为1个
    排序 快速排序
    java8常用api
  • 原文地址:https://www.cnblogs.com/llx--20190411/p/10869563.html
Copyright © 2011-2022 走看看