
อ่านไฟล์ TOML ด้วย tomllib ในสแตนดาร์ดไลบรารี
น้องกายEngineering
อยากอ่าน pyproject.toml หรือคอนฟิกเล็ก ๆ โดยไม่ติด tomli แยก ผมใช้ tomllib ที่มากับ Python 3.11+ ครับ
ตามเอกสาร โมดูลนี้อ่านอย่างเดียว (load จากไฟล์ไบนารี, loads จากสตริง) ไม่มีตัวเขียน ถ้าต้องเขียน TOML ให้ใช้ไลบรารีอื่น
import io
import unittest
import tomllib
SAMPLE = b"""
[app]
name = "showkhun"
retries = 3
[app.flags]
dry_run = true
"""
class TomllibTests(unittest.TestCase):
def test_loads_nested_table(self):
data = tomllib.loads(SAMPLE.decode("utf-8"))
self.assertEqual(data["app"]["name"], "showkhun")
self.assertEqual(data["app"]["retries"], 3)
self.assertTrue(data["app"]["flags"]["dry_run"])
def test_load_binary_file(self):
with io.BytesIO(SAMPLE) as fh:
data = tomllib.load(fh)
self.assertEqual(data["app"]["retries"], 3)
def test_invalid_raises(self):
with self.assertRaises(tomllib.TOMLDecodeError):
tomllib.loads("= broken")
if __name__ == "__main__":
unittest.main()
เปิดไฟล์จริงด้วยโหมดไบนารี ("rb") ตามที่เอกสารแนะนำ เพราะ load คาดไบต์สตรีม
Recap
- ใช้
tomllibอ่านคอนฟิกใน 3.11+ โดยไม่ติดตั้งเพิ่ม - เปิดไฟล์แบบ
"rb"ก่อนtomllib.load - จับ
TOMLDecodeErrorเมื่ออินพุตเสีย - หาไลบรารีเขียนแยกถ้าต้อง serialize กลับเป็น TOML