JSON 和 XML 是臺灣工程師常用的資料交換格式,在網頁開發和資料函式庫應用中扮演重要角色。JSON 輕量簡潔,易於解析,適合前後端資料傳輸。XML 結構嚴謹,可擴充套件性強,常用於組態檔案和資料儲存。Python 提供多種函式庫,方便處理這兩種格式,例如 json 函式庫可以解析 JSON 資料,而 xml.etree.ElementTree 可以解析和操作 XML 資料。瞭解兩者特性,才能根據專案需求選擇合適的資料格式。 Python 的 time 模組和第三方函式庫如 xmltodict,則可以進一步提升處理效率,例如將 XML 轉換為 Python 可直接操作的字典或列表。
JSON與XML的多樣化資料格式
JSON(JavaScript Object Notation)和XML(Extensible Markup Language)是兩種常用的資料格式,能夠儲存多種資料結構。這些格式不僅限於Python,許多程式語言都有函式可以讀寫這些格式。
JSON的簡介
JSON是一種輕量級的資料交換格式,易於人們閱讀和編寫。它使用鍵值對來儲存資料,鍵是字串,值可以是字串、整數、浮點數、布林值、陣列、物件或空值。JSON的語法與Python的字典和列表類別似,但有一些差異。例如,JSON使用null來表示空值,而Python使用None。
JSON的優點
JSON是一種廣泛使用的資料格式,具有以下優點:
- 輕量級:JSON的資料結構簡單,易於閱讀和編寫。
- 跨平臺:JSON可以被多種程式語言讀寫,包括Python、JavaScript、Java等。
- 人類可讀:JSON的資料結構易於人們閱讀和理解。
JSON的應用
JSON被廣泛應用於各個領域,包括:
- 網頁開發:JSON被用於網頁開發中,作為前端和後端之間的資料交換格式。
- 移動應用:JSON被用於移動應用中,作為應用程式和伺服器之間的資料交換格式。
- 資料儲存:JSON被用於資料儲存中,作為NoSQL資料函式庫的資料格式。
XML的簡介
XML是一種標記語言,使用標記來描述資料。XML的資料結構比JSON複雜,具有以下特點:
- 標記語言:XML使用標記來描述資料。
- 自我描述:XML的資料結構自我描述,易於人們閱讀和理解。
- 可擴充套件:XML的資料結構可擴充套件,易於增加新的標記和屬性。
XML的優點
XML具有以下優點:
- 自我描述:XML的資料結構自我描述,易於人們閱讀和理解。
- 可擴充套件:XML的資料結構可擴充套件,易於增加新的標記和屬性。
- 跨平臺:XML可以被多種程式語言讀寫,包括Python、JavaScript、Java等。
XML的應用
XML被廣泛應用於各個領域,包括:
- 網頁開發:XML被用於網頁開發中,作為前端和後端之間的資料交換格式。
- 資料儲存:XML被用於資料儲存中,作為NoSQL資料函式庫的資料格式。
- 檔案交換:XML被用於檔案交換中,作為不同系統之間的資料交換格式。
內容解密:
在上述內容中,我們討論了JSON和XML兩種常用的資料格式。JSON是一種輕量級的資料交換格式,易於人們閱讀和編寫。XML是一種標記語言,使用標記來描述資料。兩種格式都具有跨平臺、人類可讀等優點,但也有一些差異。瞭解這些差異,可以幫助我們選擇適合的資料格式來儲存和交換資料。
{
"name": "Alice Doe",
"age": 30,
"car": null,
"programmer": true,
"address": {
"street": "100 Larkin St.",
"city": "San Francisco",
"zip": "94102"
},
"phone": [
{
"type": "mobile",
"number": "415-555-7890"
},
{
"type": "work",
"number": "415-555-1234"
}
]
}
圖表翻譯:
下面是JSON資料結構的Plantuml圖表: 這個圖表展示了JSON資料結構的層次關係,其中Object包含多個Key-Value Pair,每個Key-Value Pair包含一個Key和一個Value。Value可以是多種型別,包括String、Integer、Float、Boolean、Array、Object和Null。
JSON和XML資料格式簡介
JSON(JavaScript Object Notation)和XML(Extensible Markup Language)是兩種常用的資料交換格式。JSON是一種輕量級的、易於閱讀的格式,廣泛用於Web開發中,而XML是一種更為複雜的格式,常用於組態檔案和資料交換。
JSON資料格式
JSON是一種根據文字的資料格式,使用鍵值對來表示資料。它支援以下基本資料型別:字串、整數、浮點數、布林值、列表、字典和空值。JSON資料可以使用json.loads()函式解析為Python字典或列表。
JSON範例
{
"name": "Alice Doe",
"age": 30,
"address": {
"street": "100 Larkin St.",
"city": "San Francisco",
"zip": "94102"
},
"phone": [
{
"type": "mobile",
"number": "415-555-7890"
},
{
"type": "work",
"number": "415-555-1234"
}
]
}
JSON編碼
Python的json.dumps()函式可以將Python資料結構編碼為JSON字串。該函式可以接受一個可選的indent引數,以指定JSON字串的縮排級別。
import json
python_data = {
"name": "Alice Doe",
"age": 30,
"address": {
"street": "100 Larkin St.",
"city": "San Francisco",
"zip": "94102"
},
"phone": [
{
"type": "mobile",
"number": "415-555-7890"
},
{
"type": "work",
"number": "415-555-1234"
}
]
}
json_string = json.dumps(python_data, indent=2)
print(json_string)
XML資料格式
XML是一種根據標籤的資料格式,使用元素和屬性來表示資料。XML檔案通常以.xml為副檔名,並且需要有一個單一的根元素來包含所有其他元素。
XML範例
<person>
<name>Alice Doe</name>
<age>30</age>
<programmer>true</programmer>
<address>
<street>100 Larkin St.</street>
<city>San Francisco</city>
<zip>94102</zip>
</address>
<phone>
<phoneEntry>
<type>mobile</type>
<number>415-555-7890</number>
</phoneEntry>
<phoneEntry>
<type>work</type>
<number>415-555-1234</number>
</phoneEntry>
</phone>
</person>
XML特點
- XML檔案需要有一個單一的根元素。
- XML元素可以有子元素和屬性。
- XML檔案通常以
.xml為副檔名。
XML 概述
XML(Extensible Markup Language)是一種用於儲存和傳輸資料的標記語言。它的設計目的是讓資料可以被人們和機器都能夠理解。XML 檔案由元素、屬性和文字內容組成,每個元素都有一個開始標籤和結束標籤,例如 <age> 和 </age>。
XML 元素和屬性
XML 元素是鍵值對,其中鍵是元素的標籤,值是元素內的文字內容。例如,<age>25</age> 中,age 是鍵,25 是值。XML 文字沒有資料型別,所有內容都被視為字串。
XML 屬性是鍵值對,寫在元素的開始標籤中,以 key="value" 格式表示。例如,<car xsi:nil="true"/> 中,xsi:nil 是鍵,true 是值。
XML 檔案結構
XML 檔案由多個元素組成,每個元素可以包含其他元素或文字內容。元素可以使用子元素或屬性來表示資料。例如,地址資料可以使用子元素表示:
<address>
<street>100 Larkin St.</street>
<city>San Francisco</city>
<zip>94102</zip>
</address>
也可以使用屬性表示:
<address street="100 Larkin St." city="San Francisco" zip="94102"/>
XML 解析
Python 的 xml.etree.ElementTree 模組提供瞭解析 XML 檔案的功能。可以使用 ET.fromstring() 函式解析 XML 字串,也可以使用 ET.parse() 函式解析 XML 檔案。
XML 檔案讀取
以下是使用 xml.etree.ElementTree 模組讀取 XML 檔案的示例:
import xml.etree.ElementTree as ET
xml_string = """<person><name>Alice Doe</name><age>25</age></person>"""
root = ET.fromstring(xml_string)
print(root.tag) # 輸出:person
print(root.text) # 輸出:None
print(list(root)) # 輸出:[Element 'name' at 0x000001942999BBA0, Element 'age' at 0x000001942999BBC0]
XML 檔案寫入
以下是使用 xml.etree.ElementTree 模組寫入 XML 檔案的示例:
import xml.etree.ElementTree as ET
root = ET.Element("person")
name = ET.SubElement(root, "name")
name.text = "Alice Doe"
age = ET.SubElement(root, "age")
age.text = "25"
tree = ET.ElementTree(root)
tree.write("person.xml")
這將建立一個名為 person.xml 的 XML 檔案,內容如下:
<person>
<name>Alice Doe</name>
<age>25</age>
</person>
圖表翻譯:
內容解密:
以上程式碼示例展示瞭如何使用 xml.etree.ElementTree 模組解析和寫入 XML 檔案。可以看到,XML 檔案由多個元素組成,每個元素可以包含其他元素或文字內容。元素可以使用子元素或屬性來表示資料。
XML 檔案的遍歷和存取
在 Python 中,使用 xml.etree.ElementTree 模組可以輕鬆地遍歷和存取 XML 檔案的元素。下面是一個簡單的範例,展示瞭如何存取和遍歷 XML 檔案的元素。
範例 XML 檔案
<person>
<name>Alice Doe</name>
<age>30</age>
<programmer>true</programmer>
<car/>
<address>
<street>100 Larkin St.</street>
<city>San Francisco</city>
<state>CA</state>
</address>
<phone/>
</person>
讀取和遍歷 XML 檔案
import xml.etree.ElementTree as ET
# 讀取 XML 檔案
tree = ET.parse('example.xml')
root = tree.getroot()
# 遍歷根元素的直接子元素
for elem in root:
print(elem.tag, '--', elem.text)
# 遍歷所有子元素(包括巢狀的)
for elem in root.iter():
print(elem.tag, '--', elem.text)
存取元素的屬性和文字
# 存取根元素的直接子元素
print(root[0].tag) # name
print(root[0].text) # Alice Doe
# 存取巢狀的元素
print(root[4][0].tag) # street
print(root[4][0].text) # 100 Larkin St.
處理自閉合標籤
# 自閉合標籤沒有文字內容
print(root[3].tag) # car
print(root[3].text) # None
這些範例展示瞭如何使用 xml.etree.ElementTree 模組來讀取、遍歷和存取 XML 檔案的元素,包括如何處理自閉合標籤和巢狀的元素。
XML 處理與解析
XML(Extensible Markup Language)是一種用於表示和交換資料的標記語言。它被廣泛用於各種應用中,包括資料交換、組態檔案和檔案編寫。在 Python 中,處理 XML 的一個重要函式庫是 xml.etree.ElementTree。
XML 解析
要解析 XML 檔案,可以使用 xml.etree.ElementTree 中的 parse() 函式。這個函式傳回一個 ElementTree 物件,代表 XML 檔案的根節點。
import xml.etree.ElementTree as ET
# 解析 XML 檔案
tree = ET.parse('example.xml')
root = tree.getroot()
XML 元素遍歷
可以使用 iter() 方法遍歷 XML 檔案中的所有元素。這個方法傳回一個迭代器,產生每個元素的 Element 物件。
# 遍歷所有元素
for elem in root.iter():
print(elem.tag, '--', elem.text)
篩選元素
如果你只想遍歷特定標籤的元素,可以傳入標籤名稱給 iter() 方法。
# 只遍歷 <number> 元素
for elem in root.iter('number'):
print(elem.tag, '--', elem.text)
XML 轉換為 Python 資料結構
Python 的標準函式庫中沒有內建的功能可以直接將 XML 轉換為 Python 資料結構。但是,你可以使用第三方函式庫如 xmltodict 來實作這個功能。
import xmltodict
# 定義 XML 字串
xml_string = """<person><name>Alice Doe</name><age>30</age><programmer>true</programmer><car xsi:nil="true"/><address><street>100 Larkin St.</street><city>San Francisco</city><zip>94102</zip></address><phone><phoneEntry><type>mobile</type><number>415-555-7890</number></phoneEntry><phoneEntry><type>work</type><number>415-555-1234</number></phoneEntry></phone></person>"""
# 解析 XML 為 Python 資料結構
python_data = xmltodict.parse(xml_string)
print(python_data)
結果
這將輸出一個 Python 字典,代表 XML 檔案中的資料結構。
{
'person': {
'name': 'Alice Doe',
'age': '30',
'programmer': 'true',
'car': {'@xsi:nil': 'true'},
'address': {
'street': '100 Larkin St.',
'city': 'San Francisco',
'zip': '94102'
},
'phone': {
'phoneEntry': [
{'type': 'mobile', 'number': '415-555-7890'},
{'type': 'work', 'number': '415-555-1234'}
]
}
}
}
XML 檔案寫入
XML 檔案可以使用 xml.etree 模組來建立和寫入。首先,需要建立一個根元素(root Element),然後使用 SubElement() 函式建立子元素。可以使用 set() 方法設定 XML 屬性。
import xml.etree.ElementTree as ET
# 建立根元素
person = ET.Element('person')
# 建立子元素
name = ET.SubElement(person, 'name')
name.text = 'Alice Doe'
age = ET.SubElement(person, 'age')
age.text = '30'
programmer = ET.SubElement(person, 'programmer')
programmer.text = 'true'
car = ET.SubElement(person, 'car')
car.set('xsi:nil', 'true')
address = ET.SubElement(person, 'address')
street = ET.SubElement(address, 'street')
street.text = '100 Larkin St.'
# 將 XML 檔案轉換為字串
xml_string = ET.tostring(person, encoding='utf-8').decode()
print(xml_string)
XML 檔案寫入練習
試著建立一個 XML 檔案,包含以下結構:
<person>
<name>Alice Doe</name>
<age>30</age>
<programmer>true</programmer>
<car xsi:nil="true"/>
<address>
<street>100 Larkin St.</street>
</address>
</person>
CSV、JSON 和 XML 格式比較
CSV、JSON 和 XML 是三種常用的純文字格式,用於儲存和交換資料。這些格式都易於程式解析和人類閱讀,因此常用於簡單的電子試算表或網頁應用資料。
- CSV(逗號分隔值)格式:使用逗號分隔值,適合儲存表格資料。
- JSON(JavaScript 物件標記)格式:使用鍵值對儲存資料,適合儲存複雜資料結構。
- XML(可擴充套件標記語言)格式:使用標記語言儲存資料,適合儲存具有階層結構的資料。
練習題
- Excel 電子試算表和 CSV 電子試算表之間的區別是什麼?
- 如何建立 CSV 讀取器和寫入器物件?
- CSV 讀取器和寫入器物件需要以什麼模式開啟檔案?
- 哪個方法可以將列表寫入 CSV 檔案?
- 分隔符和行終止符的作用是什麼?
- 哪些格式可以使用文字編輯器應用程式輕松編輯?
- 哪個函式可以將 JSON 資料字串轉換為 Python 資料結構?
- 哪個函式可以將 Python 資料結構轉換為 JSON 資料字串?
- 哪種資料序列化格式類別似於 HTML,具有角括號中的標記?
- JSON 如何寫入 None 值?
- 如何在 JSON 中寫入布林值?
練習程式:Excel 至 CSV 轉換器
使用 openpyxl 模組讀取 Excel 檔案,並將其轉換為 CSV 檔案。每個 Excel 檔案可能包含多個工作表,因此需要為每個工作表建立一個 CSV 檔案。CSV 檔案的檔名應該是 <excel 檔名>_<工作表標題>.csv,其中 <excel 檔名> 是 Excel 檔案的檔名,不包括副檔名, <工作表標題> 是工作表的標題。
import os
import openpyxl
import csv
# 取得當前工作目錄下的所有 Excel 檔案
for excel_file in os.listdir('.'):
if excel_file.endswith('.xlsx'):
# 讀取 Excel 檔案
wb = openpyxl.load_workbook(excel_file)
# 遍歷每個工作表
for sheet_name in wb.sheetnames:
sheet = wb[sheet_name]
# 建立 CSV 檔案
csv_file_name = f"{os.path.splitext(excel_file)[0]}_{sheet_name}.csv"
with open(csv_file_name, 'w', newline='') as csv_file:
writer = csv.writer(csv_file)
# 寫入 CSV 檔案
for row in sheet.rows:
writer.writerow([cell.value for cell in row])
自動化任務排程與程式啟動
在電腦科學中,能夠在不需要人工干預的情況下執行程式是非常有用的。這可以透過電腦的時鐘來實作,讓它在指定的時間執行特定的任務。下面,我們將探討如何使用Python來實作這一功能。
排程任務
Python提供了多種方法來排程任務,包括使用schedule和apscheduler函式庫。這些函式庫允許您在指定的時間或間隔內執行任務。
使用schedule函式庫
首先,您需要安裝schedule函式庫。您可以使用pip來安裝:
pip install schedule
然後,您可以使用以下程式碼來排程任務:
import schedule
import time
def job():
print("任務已執行")
schedule.every(10).seconds.do(job) # 每10秒執行一次任務
while True:
schedule.run_pending()
time.sleep(1)
這個程式碼會每10秒執行一次job函式。
使用apscheduler函式庫
apscheduler函式庫提供了更強大的排程功能。您可以使用以下程式碼來安裝:
pip install apscheduler
然後,您可以使用以下程式碼來排程任務:
from apscheduler.schedulers.blocking import BlockingScheduler
def job():
print("任務已執行")
sched = BlockingScheduler()
sched.add_job(job, 'interval', seconds=10) # 每10秒執行一次任務
sched.start()
這個程式碼會每10秒執行一次job函式。
啟動程式
除了排程任務外,您還可以使用Python來啟動其他程式。您可以使用subprocess函式庫來實作這一功能。
使用subprocess函式庫
以下程式碼示範瞭如何使用subprocess函式庫來啟動一個程式:
import subprocess
subprocess.run(["notepad.exe"]) # 啟動記事本程式
這個程式碼會啟動記事本程式。
結合排程和啟動程式
您可以結合排程和啟動程式的功能來實作更複雜的任務。例如,您可以使用schedule函式庫來排程一個任務,在指定的時間啟動一個程式。
以下程式碼示範瞭如何使用schedule函式庫來排程一個任務,在指定的時間啟動一個程式:
import schedule
import subprocess
import time
def job():
subprocess.run(["notepad.exe"]) # 啟動記事本程式
schedule.every().day.at("08:00").do(job) # 每天8:00啟動記事本程式
while True:
schedule.run_pending()
time.sleep(1)
這個程式碼會每天8:00啟動記事本程式。
圖表翻譯:
這個圖表示範了排程任務、啟動程式、執行任務和完成的流程。
內容解密:
以上程式碼示範瞭如何使用Python來排程任務和啟動程式。您可以使用schedule函式庫來排程任務,並使用subprocess函式庫來啟動程式。結合這兩個功能,您可以實作更複雜的任務。
排程式與時間模組
在 Python 中,可以使用時間模組(time)和 datetime 模組來建立排程式,讓程式在指定時間或日期執行任務。例如,可以使用排程式每小時掃描網站變化,或在凌晨 4 點執行 CPU 密集型任務。
時間模組
Python 的時間模組提供了多種功能,包括 time.time() 和 time.sleep()。time.time() 傳回當前時間的 epoch 時間戳(epoch timestamp),而 time.sleep() 可以暫停程式執行。
傳回 epoch 時間戳
epoch 時間戳是從 1970 年 1 月 1 日午夜(UTC)開始計算的秒數。time.time() 傳回這個值作為浮點數。例如:
import time
print(time.time())
這會傳回從 epoch 時間開始到目前時間的秒數。
人類可讀的時間格式
雖然 epoch 時間戳對於計算很有用,但對於人類來說並不容易閱讀。time.ctime() 函式可以傳回當前時間的字串描述。也可以傳入 epoch 時間戳作為引數來取得該時間的字串描述。例如:
import time
print(time.ctime())
this_moment = time.time()
print(time.ctime(this_moment))
這會傳回當前時間和指定時間的字串描述。
使用 epoch 時間戳進行程式碼分析
epoch 時間戳可以用於分析程式碼的執行時間。如果在程式碼塊的開始和結束處呼叫 time.time(),就可以計算出程式碼塊的執行時間。例如:
import time
def calculate_product():
start_time = time.time()
# 程式碼塊...
end_time = time.time()
elapsed_time = end_time - start_time
print(f"執行時間:{elapsed_time} 秒")
這會計算出程式碼塊的執行時間並列印結果。
Plantuml 圖表:時間模組流程
圖表翻譯:
此圖表展示了時間模組的流程。首先,呼叫 time.time() 來取得當前時間的 epoch 時間戳。然後,傳回此值作為浮點數。接下來,呼叫 time.ctime() 來取得人類可讀的時間格式。最後,傳回此值作為字串描述。
程式碼示例:計算乘積
import time
def calculate_product():
start_time = time.time()
product = 1
for i in range(1, 100001):
product *= i
end_time = time.time()
elapsed_time = end_time - start_time
print(f"執行時間:{elapsed_time} 秒")
calculate_product()
內容解密:
此程式碼示例計算了第一個 100,000 個整數的乘積,並計算了執行時間。首先,呼叫 time.time() 來取得開始時間。然後,使用迴圈計算乘積。接下來,呼叫 time.time() 來取得結束時間,並計算執行時間。最後,列印預出執行時間。
程式碼效能分析與暫停執行
在開發程式時,瞭解程式執行的效能和暫停執行是非常重要的。這篇文章將介紹如何使用Python來分析程式碼的效能和暫停執行。
程式碼效能分析
要分析程式碼的效能,可以使用time模組的time()函式來計算程式碼執行的時間。以下是一個範例:
import time
def calculate_product():
product = 1
for i in range(1, 100001):
product *= i
return product
start_time = time.time()
result = calculate_product()
end_time = time.time()
print(f"It took {end_time - start_time} seconds to calculate.")
在這個範例中,我們定義了一個calculate_product()函式來計算1到100,000的乘積。然後,我們使用time.time()函式來計算程式碼執行的時間,並將結果印出。
使用cProfile進行程式碼分析
除了使用time模組外,還可以使用cProfile模組來進行程式碼分析。cProfile模組可以提供更詳細的程式碼執行資訊,包括每個函式的執行時間和次數等。
import cProfile
def calculate_product():
product = 1
for i in range(1, 100001):
product *= i
return product
cProfile.run("calculate_product()")
在這個範例中,我們使用cProfile.run()函式來分析calculate_product()函式的執行資訊。
暫停程式執行
如果需要暫停程式執行,可以使用time.sleep()函式來暫停程式執行一段時間。以下是一個範例:
import time
for i in range(3):
print("Tick")
time.sleep(1)
print("Tock")
time.sleep(1)
在這個範例中,我們使用time.sleep()函式來暫停程式執行1秒鐘。
內容解密:
time.time()函式傳回當前的時間,單位為秒。cProfile.run()函式用於分析程式碼的執行資訊。time.sleep()函式用於暫停程式執行一段時間。
圖表翻譯:
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title JSON與XML資料格式解析與應用
package "Python 應用架構" {
package "應用層" {
component [主程式] as main
component [模組/套件] as modules
component [設定檔] as config
}
package "框架層" {
component [Web 框架] as web
component [ORM] as orm
component [非同步處理] as async
}
package "資料層" {
database [資料庫] as db
component [快取] as cache
component [檔案系統] as fs
}
}
main --> modules : 匯入模組
main --> config : 載入設定
modules --> web : HTTP 處理
web --> orm : 資料操作
orm --> db : 持久化
web --> cache : 快取查詢
web --> async : 背景任務
async --> fs : 檔案處理
note right of web
Flask / FastAPI / Django
end note
@enduml在這個圖表中,我們展示了程式碼的執行流程,包括計算乘積、計算時間和印出結果等步驟。
圖表解說:
開始節點代表程式碼的開始。計算乘積節點代表計算1到100,000的乘積的過程。計算時間節點代表計算程式碼執行時間的過程。印出結果節點代表印出結果的過程。結束節點代表程式碼的結束。
stopwatch.py:簡單的計時器程式
程式描述
本程式是一個簡單的計時器,允許使用者記錄每圈的時間,並計算總時間。使用者可以按下 Enter 鍵開始計時,然後每次按下 Enter 鍵都會記錄一圈的時間。
程式碼
# 載入 time 模組
import time
# 顯示程式的指令
print('按下 Enter 鍵開始計時,然後每次按下 Enter 鍵都會記錄一圈的時間。')
input() # 按下 Enter 鍵開始
print('開始計時。')
start_time = time.time() # 紀錄開始時間
last_time = start_time # 紀錄上一圈的時間
lap_number = 1 # 計算圈數
try:
while True:
input() # 等待使用者按下 Enter 鍵
# 計算圈時間和總時間
lap_time = round(time.time() - last_time, 2)
total_time = round(time.time() - start_time, 2)
# 顯示圈時間和總時間
print(f'第 {lap_number} 圈:{lap_time} 秒')
print(f'總時間:{total_time} 秒')
# 更新上一圈的時間和圈數
last_time = time.time()
lap_number += 1
except KeyboardInterrupt:
print('結束計時。')
程式解釋
- 載入
time模組,以便使用time.time()函式取得目前的時間。 - 顯示程式的指令,告知使用者如何使用程式。
- 按下 Enter 鍵開始計時,然後紀錄開始時間和上一圈的時間。
- 進入無限迴圈,等待使用者按下 Enter 鍵結束一圈。
- 計算圈時間和總時間,然後顯示結果。
- 更新上一圈的時間和圈數。
- 如果使用者按下 Ctrl+C 鍵,則結束計時並顯示結束訊息。
執行程式
儲存程式碼為 stopwatch.py,然後執行程式。按下 Enter 鍵開始計時,然後每次按下 Enter 鍵都會記錄一圈的時間。按下 Ctrl+C 鍵結束計時。
從使用者經驗視角出發,本文深入探討了JSON和XML兩種資料格式的特性、應用場景以及Python的處理方式。分析段落清晰地比較了JSON輕量簡潔的優勢和XML自描述性強的特性,並結合程式碼示例,闡明瞭如何在不同情境下選擇合適的資料格式。技術限制深析部分指出了Python標準函式庫缺乏直接將XML轉換為Python資料結構的功能,並提供了使用第三方函式庫xmltodict的解決方案,展現了務實的解決問題思路。展望未來,隨著資料交換需求日益複雜,JSON和XML仍將扮演重要角色。預計會有更多工具和函式庫出現,簡化開發者處理這兩種資料格式的流程,並提升資料交換效率。玄貓認為,開發者應根據專案需求靈活選用JSON或XML,並持續關注相關技術的發展趨勢,才能在資料處理領域保持競爭力。