啥是.toml格式,對python專案開發有何重要性

更新 發佈閱讀 8 分鐘

TOML 近年來在軟體開發領域,尤其是在 Python 社群中,變得越來越重要。

1. TOML 格式的用途是什麼?

TOML 的全名是 Tom’s Obvious, Minimal Language (湯姆的顯而易見的、最小化的語言)。

它的主要用途是作為設定檔 (Configuration File) 的格式。設計 TOML 的核心目標是:

  1. 人類易讀性 (Human-Readable):TOML 的語法被設計得非常直觀,一眼就能看懂鍵值關係和資料結構,就像在閱讀一個 .ini 檔案,但功能更強大。
  2. 易於解析 (Easy to Parse):它的結構清晰,讓程式可以非常簡單、 unambiguous 地將其解析成對應的資料結構(如字典或雜湊表)。
  3. 語意明確 (Unambiguous):TOML 的規範很嚴格,避免了像 YAML 那樣因為縮排或語法細節而導致的解析歧義。

簡單來說,TOML 致力於成為一個「更好」的設定檔格式。

常見應用場景:

  • Python 專案:自從 PEP 518 和後續提案的推廣,pyproject.toml 已經成為現代 Python 專案的標準設定檔,用來管理專案的建構依賴 (build dependencies)、專案元數據 (metadata) 和各種工具(如 blackpytestruff)的設定。這也是您在上一個問題中看到的用法。
  • Rust 語言:Rust 的套件管理器 Cargo 使用 Cargo.toml 作為其專案的清單檔案 (manifest file),用來定義套件資訊、依賴項等。
  • 靜態網站生成器:許多靜態網站生成器(如 Hugo)也支援使用 TOML 來撰寫網站的設定。
  • 各種應用程式設定:任何需要一個清晰設定檔的應用程式,都可以選擇 TOML。

與其他格式相比:

  • 相較於 JSON:TOML 更適合手動編寫和維護,因為它允許註解,且語法更寬鬆(例如,尾隨逗號是允許的)。JSON 則更適合做為機器間的資料交換格式。
  • 相較於 YAML:TOML 的語法更簡單、更嚴格,避免了 YAML 複雜的縮排和語法特性可能導致的混淆和安全風險(例如 “Norway Problem”)。
  • 相較於 INI:TOML 可以視為 INI 的超集 (superset),它支援巢狀結構、陣列、多種資料型別,功能遠比傳統 INI 格式強大。

2. TOML 是誰發明的?

TOML 的發明者是 湯姆·普雷斯頓-維爾納 (Tom Preston-Werner)

他是一位在開發者社群中非常有影響力的人物,最為人所知的身分是 GitHub 的共同創辦人 (Co-founder) 兼前任執行長 (CEO)。他創造 TOML 的初衷,就是希望有一個簡單、明確,且不會引起混淆的設定檔格式。

3. TOML 的基本寫法與架構

TOML 的結構主要由以下幾個部分組成:

  • 鍵值對 (Key-Value Pairs)to
  • 註解 (Comments)
  • 資料表 / 區塊 (Tables)
  • 資料表陣列 (Arrays of Tables)

以下是相關的語法說明和範例:

基本架構範例

# 這是一個 TOML 文件的頂層。
# 井號 (#) 開頭的都是註解。

# 1. 頂層的鍵值對
title = "TOML 範例"
version = 1.0
is_production = false

# 2. 資料型別
# 字串
author = "Tom Preston-Werner"
# 整數
year = 2024
# 浮點數
pi = 3.14159
# 布林值
enabled = true
# 日期與時間 (遵循 RFC 3339 標準)
release_date = 2025-09-03T16:49:12+08:00

# 3. 陣列 (Arrays)
ports = [ 8001, 8002, 8003 ]
developers = [ "Alice", "Bob", "Charlie" ]

# 陣列可以包含不同類型,但不建議這麼做
mixed_data = [ 1, "test", true ]

# 4. 資料表 / 區塊 (Table) - 用於建立巢狀結構
# 語法: [table_name]

[database]
server = "192.168.1.1"
port = 5432
user = "admin"
password = "password123"

# 5. 巢狀資料表 (Nested Tables)
# 語法: [table.sub_table]
[owner]
name = "John Doe"
organization = "ACME Corp"
[owner.contact] # 這裡的 contact 就隸屬於 owner 之下
email = "john.doe@acme.com"
phone = "02-1234-5678"
# 等同於以下的 JSON 結構:
# {
# "owner": {
# "name": "John Doe",
# "organization": "ACME Corp",
# "contact": {
# "email": "john.doe@acme.com",
# "phone": "02-1234-5678"
# }
# }
# }

# 6. 資料表陣列 (Array of Tables) - 用於表示一組物件
# 語法: [[table_name]]
# 每次重複使用 [[table_name]] 就代表陣列中的一個新物件
[[products]]
name = "Laptop"
sku = "PROD-001"
price = 45000.0

[[products]]
name = "Mouse"
sku = "PROD-002"
price = 1200.0

# 等同於以下的 JSON 結構:
# {
# "products": [
# { "name": "Laptop", "sku": "PROD-001", "price": 45000.0 },
# { "name": "Mouse", "sku": "PROD-002", "price": 1200.0 }
# ]
# }

# 7. 多行字串
# 使用三個雙引號 (""")

multi_line_string = """
這是一段可以換行的文字。"""

# 8. 字面量字串 (Literal Strings)
# 使用單引號,裡面的特殊字元不會被轉義
path = 'C:\Users\admin\Documents' # \U 和 \D 不會被當作跳脫字元

總結

特性說明用途作為一個人類易讀、電腦易解析的設定檔格式。

核心語法key = value,簡單明瞭。

註解使用 # 符號。

巢狀結構使用 [table_name] 和 [table.sub_table] 建立階層。

物件列表使用 [[array_of_tables]] 語法來定義一組擁有相同結構的物件。

優點語法清晰、無歧義、功能比 INI 強大、比 YAML 簡單安全。

主要應用Python 的 pyproject.toml、Rust 的 Cargo.toml 等。

留言
avatar-img
留言分享你的想法!
avatar-img
慵懶貓系的小墨魚:數據外的日常觀察
1會員
34內容數
小墨魚,一位白天擅長資料分析與統計建模的數據工作者,夜裡則沉浸在書本與文字裡,透過閱讀與寫作與世界對話。工作之餘,也兼職統計家教,協助學生理解複雜的統計概念與軟體操作。這裡記錄我的書評、生活觀察、科技碎念,有時也寫下關於時間與情緒的小片段。願這些文字,成為我們在日常中相遇的溫柔片刻。
你可能也想看
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
INI 檔案是一種配置檔案格式,常用於保存設定資料和組態資訊。 它使用簡單的鍵值對結構來組織資料,通常用於程式、應用程式或操作系統中的配置和初始化設定。 INI 檔案每個鍵值對包含一個名稱(鍵)和對應的值。 基本的檔案格式如下: [Section1] Key1 = Value1 Key2 =
Thumbnail
INI 檔案是一種配置檔案格式,常用於保存設定資料和組態資訊。 它使用簡單的鍵值對結構來組織資料,通常用於程式、應用程式或操作系統中的配置和初始化設定。 INI 檔案每個鍵值對包含一個名稱(鍵)和對應的值。 基本的檔案格式如下: [Section1] Key1 = Value1 Key2 =
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
JSON(JavaScript Object Notation)是一種用於資料交換的輕量級資料格式,通常用於網路應用程式之間的資料傳遞。 JSON的格式易於閱讀和撰寫,也易於解析和產生,因此它在開發中被廣泛使用。 JSON由兩種結構組成:物件(Object)和陣列(Array)。
Thumbnail
JSON(JavaScript Object Notation)是一種用於資料交換的輕量級資料格式,通常用於網路應用程式之間的資料傳遞。 JSON的格式易於閱讀和撰寫,也易於解析和產生,因此它在開發中被廣泛使用。 JSON由兩種結構組成:物件(Object)和陣列(Array)。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News