PYTHON-模塊 json pickle shelve xml

"""    pickle 和 shevle 序列化後獲得的數據 只有python才能解析    一般企業開發不可能作一個單機程序 都須要聯網進行計算機間的交互    咱們必須保證這個數據 可以跨平臺使用    JSON是什麼? java script object notation  就是的對象表示法    var obj = {"name":"egon"}    對於咱們開發而言 json就是一種通用的數據格式 任何語言都能解析    js 中的數據類型  python數據類型 的對應關係    {}              字典    []              list    string ""       str    int/float       int/float    true/false      True/False    null            None    json格式的語法規範    最外層一般是一個字典或列表    {} or []    只要你想寫一個json格式的數據 那麼最外層直接寫{}    字符串必須是雙引號    你能夠在裏面套任意多的層次    json模塊的核心功能    dump        load    dumps       loads    不帶s 封裝write 和 read"""import jsonusers = {'name':"音樂會","age":20,"hobbies":("music","movies")}# res1= json.dumps(users)# print(res1)# res=json.dump(users,open("users.json","wt",encoding="utf-8"))# print(res)# json的反序列化# jsonstr = json.load(open("users.json","r",encoding="utf-8"))# print(jsonstr,type(jsonstr))## with open("users.json","rt",encoding="utf-8") as f:#     jsonstr1 = json.loads(f.read())# print(jsonstr1,type(jsonstr1))mydic = {    "users": [{        "name": "agon",        "age": 68    },        {            "name": "agon",            "age": 68        }    ]}# with open("b.json","wt",encoding="utf-8") as f:#     f.write(json.dumps(mydic))# with open("b.json", "wt", encoding="utf-8") as f:#     json.dump(mydic, f)# =================================='''pickle    一種python獨有的序列化方式    支持python中全部的類型    dump        load    dumps       loads'''# ===================================='''shelve    一種python獨有的序列化方式 進行了進一步封裝  只有一個open函數    獲得一個shevle對象後 直接把它當成一個字典 經過key來存取    它於pickle不一樣之處在於  不須要關心文件模式什麼的 直接把它當成一個字典來看待    它能夠直接對數據進行修改 而不用覆蓋原來的數據    而pickle 你想要修改只能 用wb模式來覆蓋'''import shelve# user = {"name":"高根"}# s = shelve-egon.open("userdb.shv")# s["user"] = user# s.close()# s = shelve.open("userdb.shv",writeback=True)# print(s["user"])# s["user"]["age"] = 20# s.close()# =============================='''    與json的區別    XML相比較 更加劇量級(貶義詞) 一樣的數據 xml格式佔用更多空間    最要命 解析很是麻煩   你須要知道xml究竟是什麼結構    更多的是編寫(照着模板填空)  解析的工做 一般框架已經作好了XML    什麼XML:全稱 可擴展標記語言        標記指的是表明某種含義的字符 XML<>    爲何須要XML        爲可以在不一樣的平臺間繼續數據的交換        爲了使交換的數據能讓對方看懂 就須要按照必定的語法規範來書寫    XML語法格式:        1、任何的起始標籤都必須有一個結束標籤。            <tagname></tagname>            <tagname></tagname>            <tagname/>  簡化寫法    2、能夠採用另外一種簡化語法,能夠在一個標籤中同時表示起始和結束標籤。            這種語法是在大於符號以前緊跟一個斜線(/),例如<百度百科詞條/>。            XML解析器會將其翻譯成<百度百科詞條></百度百科詞條>。    3、標籤必須按合適的順序進行嵌套,因此結束標籤必須按鏡像順序匹配起始標籤,例如這是一串百度百科中的樣例字符串。這比如是將起始和結束標籤看做是數學中的左右括號:在沒有關閉全部的內部括號以前,是不能關閉外面的括號的。            <tag1>                <tag2>                    <tag3>                    </tag3>                </tag2>            </tag1>    大白話  關閉標籤應該從內往外 一層一層關閉 順序不能亂    4、全部的特性都必須有值。        特性指的是屬性        <person name="">        </person>    5、全部的特性都必須在值的周圍加上雙引號。    注意:最外層有且只有一個標籤 這個標籤稱之爲根標籤             第一行應該有文檔聲明 用於高速計算機怎麼理解              例如:<?xml version="1.0" encoding="utf-8"?>              當標籤嵌套的時候會出現層級關係  若是一個標籤不被任何別的標籤包裹 那他就是根標籤(最外層)    使用場景:        1.配置文件        2.常規的數據交換  例如從服務器獲取一段新聞    與json的區別:        做用是同樣的 都是一種數據格式        xml比json先誕生        json的數據比xml小        目前json是主流    python中的xml處理        使用到的模塊        ElmentTree 表示整個文件的元素樹        Elment 表示一個節點            屬性            1.text      開始標籤和結束標籤中間的文本            2.attrib    全部的屬性     字典類型            3.tag       標籤的名字            方法                get 獲取某個屬性的值        1.解析XML            查找標籤            find      在子標籤中獲取名字匹配第一個            findall   在子標籤中獲取名字匹配的全部標籤            iter(tagname)      在全文中查找[匹配的全部標籤 返回一個迭代器        2.生成XML            用ElmentTree            parse()  解析一個文件            getroot() 獲取根標籤            write()  寫入到文件        3.修改xml            set 一個屬性            remove 一個標籤            append 一個標籤'''import xml.etree.ElementTree as ElementTree# 解析d.xml-egontree = ElementTree.parse("d.xml")# print(tree)# 獲取根標籤rootTree = tree.getroot()# 三種獲取標籤的方式# 獲取全部人的年齡 iter是用於在全文範圍獲取標籤# for item in rootTree.iter("age"):#     # 一個標籤三個組成部分#     print(item.tag) # 標籤名稱#     print(item.attrib) # 標籤的屬性#     print(item.text) # 文本內容# 第二種 從當前標籤的子標籤中找到一個名稱爲age的標籤  若是有多個 找到的是第一個# print(rootTree.find("age").attrib)# 第三種 從當前標籤的子標籤中找到全部名稱爲age的標籤# print(rootTree.findall("age"))# 獲取單個屬性# stu = rootTree.find("stu")# print(stu.get("age"))# print(stu.get("name"))# 刪除子標籤# rootTree.remove(stu)# 添加子標籤# 要先建立一個子標籤# newTag = ElementTree.Element("這是新標籤",{"一個屬性":"值"})# rootTree.append(newTag)# 寫入文件# tree.write("f.xml",encoding="utf-8")"""    用代碼生成一個xml文檔import xml.etree.ElementTree as et# 建立根標籤root = et.Element("root")# 建立節點樹t1 = et.ElementTree(root)# 加一個peron標籤persson = et.Element("person")persson.attrib["name"] = "yyh"persson.attrib["sex"] = "man"persson.attrib["age"] = "20"persson.text = "這是一個person標籤"root.append(persson)# 寫入文件t1.write("newXML.xml",encoding="utf-8",xml_declaration=True)"""# ==============================='''configparserconfigparser 是什麼? 配置文件解析模塊    什麼是配置文件?            用於提供程序運行所須要的一些信息的文件   後綴 ini cfg            配置信息 一般是 須要更改可是不須要常常改的值    有什麼用?            方便用戶修改   例如超時時間配置文件內容格式        只包括兩種元素        section  分區        option   選項        一個文件能夠有多個section        一個section能夠有多個選項核心功能    1.sections 獲取全部分區    2.options  獲取全部選項    3.get      獲取一個值     傳入 section  option    注意:大小寫不敏感經常使用功能:    read 讀取一個配置文件    write 寫入到文件中    get 獲取某個分區下 某個選項的值    set   修改 或增長選項    remove_section  刪除分區    remove_option   刪除選項    add_section   添加分區'''# 僞裝作一個下載功能 最大連接速度能夠由用戶來控制  用戶不會看代碼 因此提供一個配置文件import configparser# 獲得配置文件對象cfg = configparser.ConfigParser()# 讀取一個配置文件cfg.read("download.ini")# 獲取須要的信息# 獲取全部分區# print(cfg.sections())# 獲取全部選項# print(cfg.options("section1"))# 獲取某個選項的值# print(type(cfg.get("section1","maxspeed")))# get返回的都是字符串類型# 若是須要轉換類型 直接使用get+對應的類型(bool int float)# print(type(cfg.getint("section1","maxspeed")))# print(cfg.getint("section2","minspeed"))# 是否由某個選項# config.has_option()# 是否由某個分區# config.has_section()# 不太經常使用的# 添加# config.add_section("server")# config.set("server","url","192.168.1.2")# 刪除# config.remove_option("user","age")# 修改# config.set("server","url","192.168.1.2")# 寫回文件中# with open("test.cfg", "wt", encoding="utf-8") as f:#     config.write(f)
相關文章
相關標籤/搜索