"""
XML 全稱 可擴展標記語言
<tag></tag> 雙標籤
<tag/> 單標籤 沒有文本 通常用於設計文檔結構 例如換行等
<tr/> 表示換行html
<tag style="color:red" age="18">12345</tag>
一個標籤的完整組成 有三個部分
tag 是標籤名稱
12345 是文本內容 text
name = "jack" 是標籤的屬性python
其餘的規範
1.又開始就必須有結束
2.全部屬性值必須包含在雙引號裏面
3.只能有一個根標籤 (最外層只能有一個標籤)
4.開始標籤和結束標籤的順序是相反的 最早打開誰 就最後關閉誰 最後打開的最早關閉
文檔聲明可不寫 主要是告訴瀏覽器 該怎麼解析這個文件
xml模塊是自帶的 不須要安裝shell
與json的區別
xml 是一種可擴展的標記語言
能夠高度自定義文檔的結構 數據類型 標籤的含義等等
因此擴展性遠比JSON要強編程
json更加適用於 先後臺數據交換 優勢 輕量級 跨平臺 語法簡潔
xml更多用來做爲配置文件 固然 python不太經常使用
html就是一種xmljson
"""
import xml.etree.ElementTree as ET
# 打開一個文檔 獲得一個元素樹(XML文檔)
tree = ET.parse("test1.xml")
# 獲取根標籤
root = tree.getroot()瀏覽器
# 遍歷出root標籤的全部子標籤
# for tag in root:
# print(tag)ruby
# 遍歷出文檔中全部標籤
# for tag in root.iter():
# print(tag)微信
# 從root下查找第一個名字爲country的子標籤
# country = root.find("country")
# print(country)app
# 從root下查找全部名字爲country的子標籤
# countrys = root.findall("country")
# print(countrys)函數
# 從root下查找全部名字爲country的子孫標籤
# for tag in root.iter("country"):
# print(tag)
"""
解析xml獲得一個tree對象後 查找標籤的4種方式
1.iter()
若是沒有參數則查找全部標籤
若是有參數則查找全部名字匹配的標籤
查找範圍 爲全文
2.find()
必須給參數
查找當前標籤的子標籤 返回第一個名字匹配的
3.findall()
必須給參數
查找當前標籤的子標籤 返回全部名字匹配的
4.直接遍歷某個標籤
返回的是這個標籤的全部子標籤
###########################################
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("===================================")
##################################################
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")
#
# 把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")
# 添加標籤
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") # 寫入文件
##################################################
#
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")
#############################
面向過程編程思想
關注的點就是完成任務的過程
第一步
第二步
一步一步按照固定順序來完成任務
是一種機械化的思惟,就像一條流水線,指定流水線只能生產指定產品
缺點:
牽一髮而動全身 擴展性很是低,可維護性差
優勢:
將複雜的事情,簡單化,並流程化
應用場景:
對擴展要求較低的程序
系統內核,shell腳本,計算器啥的
面向對象編程
是一種編程思想
面向:朝着 向着
對象是什麼
面向對象關注點是對象,把你的思惟角度從具體操做這 變成了一個指揮者
例如把大象裝進冰箱
1.打開冰箱
2.塞入大象
3.關閉冰箱
以上就是典型面向過程思想
換成面向對象
找一個具有裝大象這個技能的對象 而後命令它裝大象
注意:對象不是憑空產生的 須要咱們本身先設計對象 而後在使用它們
面向對象優勢:
不須要在關注具體的實現細節 能夠更好的關注業務邏輯
擴展性提升了,維護性高,複用性高
缺點:
對比面向過程而言.程序須要先設計,結構更復雜,編程複雜度提升了
沒法準確預知執行結果
應用場景:
對於擴展性要求較高的應用程序
qq,微信,王者榮耀
面向對象是一種編程思想,讓你不須要關心具體實現細節,而是關注對象
優勢:擴展性高,複用性,維護性
什麼是對象?
萬事萬物都是對象
對象:具有某種特徵與行爲的集合體而且是具體存在的就稱之爲對象
如來佛祖,owen
類: 某些具有相同特徵和相同行爲的集合體 ,是一種抽象概念 類型==類
人,動物,狗,老男孩的老師
特徵==屬性
行爲==技能
對象和類的關係
在生活中 先有對象 再有類
在代碼中 必須現有類 才能產生對象 (由於你須要提早告訴計算機這個對象是什麼樣的有什麼技能)
編程思想不是某一個具體語言或技術 ,
面向對象的語言:
python,Java,C++,C#
面向過程:
C,ruby
######################################類的使用
使用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()
#################################################對象的使用
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 = ElementTree.parser("文件")
root = tree.getroot()
# 查
root.iter/find/findall
# 增
root.append(標籤對象)
# 刪
root.remove(標籤對象)
修改
root.text = "新值"
root.tag = "新名字"
root.set("key","value")
tree.write()
1.面向對象是什麼?
2.面向對象與面向過程的優缺點對比 以及使用場景對比
3.什麼是對象 什麼是類
4.類和對象的關係
5.如何定義一個類
6.如何建立對象
7.屬性的訪問順序
8.類和對象的名稱空間是獨立的
init對象.name=xiec