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(可擴充套件標記語言)格式:使用標記語言儲存資料,適合儲存具有階層結構的資料。

練習題

  1. Excel 電子試算表和 CSV 電子試算表之間的區別是什麼?
  2. 如何建立 CSV 讀取器和寫入器物件?
  3. CSV 讀取器和寫入器物件需要以什麼模式開啟檔案?
  4. 哪個方法可以將列表寫入 CSV 檔案?
  5. 分隔符和行終止符的作用是什麼?
  6. 哪些格式可以使用文字編輯器應用程式輕松編輯?
  7. 哪個函式可以將 JSON 資料字串轉換為 Python 資料結構?
  8. 哪個函式可以將 Python 資料結構轉換為 JSON 資料字串?
  9. 哪種資料序列化格式類別似於 HTML,具有角括號中的標記?
  10. JSON 如何寫入 None 值?
  11. 如何在 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提供了多種方法來排程任務,包括使用scheduleapscheduler函式庫。這些函式庫允許您在指定的時間或間隔內執行任務。

使用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('結束計時。')

程式解釋

  1. 載入 time 模組,以便使用 time.time() 函式取得目前的時間。
  2. 顯示程式的指令,告知使用者如何使用程式。
  3. 按下 Enter 鍵開始計時,然後紀錄開始時間和上一圈的時間。
  4. 進入無限迴圈,等待使用者按下 Enter 鍵結束一圈。
  5. 計算圈時間和總時間,然後顯示結果。
  6. 更新上一圈的時間和圈數。
  7. 如果使用者按下 Ctrl+C 鍵,則結束計時並顯示結束訊息。

執行程式

儲存程式碼為 stopwatch.py,然後執行程式。按下 Enter 鍵開始計時,然後每次按下 Enter 鍵都會記錄一圈的時間。按下 Ctrl+C 鍵結束計時。

從使用者經驗視角出發,本文深入探討了JSON和XML兩種資料格式的特性、應用場景以及Python的處理方式。分析段落清晰地比較了JSON輕量簡潔的優勢和XML自描述性強的特性,並結合程式碼示例,闡明瞭如何在不同情境下選擇合適的資料格式。技術限制深析部分指出了Python標準函式庫缺乏直接將XML轉換為Python資料結構的功能,並提供了使用第三方函式庫xmltodict的解決方案,展現了務實的解決問題思路。展望未來,隨著資料交換需求日益複雜,JSON和XML仍將扮演重要角色。預計會有更多工具和函式庫出現,簡化開發者處理這兩種資料格式的流程,並提升資料交換效率。玄貓認為,開發者應根據專案需求靈活選用JSON或XML,並持續關注相關技術的發展趨勢,才能在資料處理領域保持競爭力。