第10天 | 12天搞定Python,文件操作(超詳細)
- 2020 年 10 月 20 日
- 筆記
在開發系統的過程中,經常會用到XML存儲和傳輸數據,XML是一種用於標記電子文件使其具有結構性的標記語言,在部落格中經常會見到。
JSON是一種輕量級的數據交換格式,常被用在後端和前端的數據交互上,如你用Python提供後端WebService數據介面,App在調用這個介面時,收到的數據就是JSON文件。
txt是最常見的一種文件格式 ,主要存文本資訊,即為文字資訊,現在的作業系統大多使用記事本等程式保存,大多數軟體可以查看,如記事本,瀏覽器等。
10.1 XML文件
XML指可擴展標記語言(eXtensible Markup Language)。由成對標籤如<book></book>或閉環標籤<book/>組成,最外部標籤稱為根節點。在根節點裡面,可以包含很多子節點,子節點有自己的屬性和文本。如下樣例:book為根節點,name有自己的屬性name,author的文本值為老陳,price為閉環標籤。
<book> <name name="書名">12天搞定Python</name> <author>老陳</author> <price price="0.00元" /> </book>
在自帶的標準庫中,Python提供了大量可以用於處理XML語言的包和工具,經我和同事測試、比較,發現ElementTree模組是最好用的,所有我推薦你也用它來處理XML文件。
1. 創建XML
XML文件,從創建節點(book)開始,之後創建裡面的子節點,並對子節點進行屬性和內容添加。
import xml.etree.ElementTree as ET # 創建根節點 book = ET.Element("book") # 創建子節點,並添加屬性和數據 title = ET.SubElement(book, "name") title.attrib = {"name": "書名"} title.text = "12天搞定Python" # 創建子節點,並添加數據 author = ET.SubElement(book, "author") author.text = "老陳" price = ET.SubElement(book, "price") # 創建子節點,並添加數據 price.attrib = {"price": "0.00元"} # 創建tree對象,寫文件 tree = ET.ElementTree(book) tree.write("book.xml", encoding="UTF-8")
輸出結果(book.xml文件)
<book> <name name="書名">12天搞定Python</name> <author>老陳</author> <price price="0.00元" /> </book>
2. 修改XML
修改book.xml文件,新增創建日期,修改name的屬性名為arr,價格調整為0.01元。
import xml.etree.ElementTree as ET tree = ET.parse("book.xml") # 讀取待修改文件 book = tree.getroot() # 創建新節點並添加為root的子節點 createDate = ET.Element("createDate") createDate.attrib = {"name": "創建日期"} createDate.text = "2020-10-01" book.append(createDate) # 修改書名的屬性 name = book.find("name") name.attrib = {"name": "arr"} # 修改價格 price = book.find("price") price.text = "0.01元" # 寫回原文件 tree.write("book.xml", encoding="UTF-8")
輸出結果(book.xml文件)
<book> <name name="arr">12天搞定Python</name> <author>老陳</author> <price price="0.00元">0.01元</price> <createDate name="創建日期">2020-10-01</createDate> </book>
3. 刪除XML節點
刪節點,先找到,再用remove()方法進行刪除。
import xml.etree.ElementTree as ET tree = ET.parse("book.xml") # 讀取待修改文件 book = tree.getroot() for price in book.findall('price'): book.remove(price) tree.write('book.xml', encoding="UTF-8")
輸出結果(book.xml文件)
<book> <name name="arr">12天搞定Python</name> <author>老陳</author> <createDate name="創建日期">2020-10-01</createDate> </book>
4. 讀取XML
循環讀取節點內容,輸出不為None的節點。
import xml.etree.ElementTree as ET tree = ET.parse("book.xml") # 讀取待修改文件 book = tree.getroot() for node in book.iter(): if node.text is not None: print(node.tag, ":", node.text)
10.2 JSON文件
JSON文件數據由一系列鍵值對組成並用逗號隔開和我們學過的字典可進行化互相轉換。Python 中可以使用json模組對JSON 數據進行編解碼。
1. 創建JSON文件
json.dumps()對字元串數據進行編碼, json.dump()對文件數據進行編碼。
import json # 字典轉換為JSON對象 book = { 'name': "12天搞定Python", 'author': '老陳', 'price': 0.00 } # 生成json格式 json_str = json.dumps(book, ensure_ascii=False) # 寫入 JSON 數據 with open('book.json', 'w') as f: json.dump(json_str, f)
輸出結果(book.json文件內容)
"{"name": "12天搞定Python", "author": "老陳", "price": 0.0}"
2. 讀取JSON文件
….