นากกายเปิดสมุดโน้ตคอนฟิกบนโต๊ะมิ้นต์มีกุญแจและค่าคู่กัน

อ่านไฟล์ 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