啥是.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
慵懶貓系的小墨魚:數據外的日常觀察
0會員
14內容數
小墨魚,一位白天擅長資料分析與統計建模的數據工作者,夜裡則沉浸在書本與文字裡,透過閱讀與寫作與世界對話。工作之餘,也兼職統計家教,協助學生理解複雜的統計概念與軟體操作。這裡記錄我的書評、生活觀察、科技碎念,有時也寫下關於時間與情緒的小片段。願這些文字,成為我們在日常中相遇的溫柔片刻。
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
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)。
Thumbnail
在程式中,了解資料型態是相當重要的。 為什麽? 因為許多error,常常都是因為資料型態不正確所導致的。 舉個例子,在python中: a = 1 + 2 print(a) 結果就是3 a = = "1"+"2" print(a) 結果就是12 是不是差很多? 所以今天我來介
Thumbnail
在程式中,了解資料型態是相當重要的。 為什麽? 因為許多error,常常都是因為資料型態不正確所導致的。 舉個例子,在python中: a = 1 + 2 print(a) 結果就是3 a = = "1"+"2" print(a) 結果就是12 是不是差很多? 所以今天我來介
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News