1. 程式人生 > >第10天 | 12天搞定Python,檔案操作(超詳細)

第10天 | 12天搞定Python,檔案操作(超詳細)

在開發系統的過程中,經常會用到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檔案

....