Đọc và viết các tệp TOML trong Python 3

TOML (Tom's Obvious, Minimal Language) là một định dạng tệp cấu hình dễ đọc và dễ viết. Định dạng này được tạo ra để cung cấp một cách đơn giản và linh hoạt để biểu diễn dữ liệu cấu hình, dễ dàng cho con người đọc và chỉnh sửa.

Ví dụ cơ bản

# config.toml

[server]
host = "localhost"
port = 8080

[database]
name = "mydb"
user = "myuser"
password = "mypassword"

Trong đoạn mã trên, chúng ta đã định nghĩa một tệp cấu hình TOML, chứa thông tin cấu hình cho máy chủ và cơ sở dữ liệu. Sử dụng cú pháp [phần], chúng ta có thể nhóm thông tin cấu hình và sử dụng cú pháp tên Biến = giá Trị để định nghĩa các cấu hình cụ thể.

Phương pháp đọc các tệp cấu hình TOML: Cài đặt thư viện

pip install tomli

Sử dụng thư viện

import tomli

cac_thiet_lap = tomli.load('config.toml')

print(cac_thiet_lap['server']['host'])
print(cac_thiet_lap['database']['name'])

Trong đoạn mã trên, chúng ta trước tiên đã import thư viện tomli. Sau đó, chúng ta sử dụng phương thức tomli.load() để đọc và phân tích tệp cấu hình TOML, lưu kết quả vào biến cac_thiet_lap dưới dạng một từ điển.

Cấu trúc phức tạp và嵌套

# testcase1.toml
[test_case]
ten = 'Test Case 1'
priority = 1  # hỗ trợ các loại dữ liệu số
ready = true  # hỗ trợ bool
tags = ['demo', 'api-test']  # dạng danh sách

[[test_case.buoc_thuc_hien]]  # danh sách các bước thực hiện (cú pháp嵌套)
target = "http.get"
args = { method = "GET", url = "http://localhost:3000/api/get" }  # hỗ trợ cấu trúc từ điển

[[test_case.buoc_thuc_hien]]  # danh sách các bước thực hiện
target = "http.post"
args = { method = "POST", url = "http://localhost:3000/api/post", json = { a = 1, b = 2 } }

Đọc nội dung tệp bằng Python

from pprint import pprint
import tomli
du_lieu = tomli.load('testcase1.toml')
pprint(du_lieu['test_case'])

Kết quả khi chạy:

{'ten': 'Test Case 1',
 'priority': 1,
 'ready': True,
 'buoc_thuc_hien': [{'args': {'method': 'GET', 'url': 'http://localhost:3000/api/get'},
                     'target': 'http.get'},
                    {'args': {'json': {'a': 1, 'b': 2},
                              'method': 'POST',
                              'url': 'http://localhost:3000/api/post'},
                     'target': 'http.post'}]}

Sự khác biệt giữa các định dạng tệp TOML và INI

  • TOML cho phép giá trị biến có nhiều loại dữ liệu, trong khi INI默认 là chuỗi.
  • Trong TOML, chuỗi phải được thêm dấu ngoặc kép (cả đơn và kép đều được chấp nhận), còn INI không yêu cầu dấu ngoặc.
  • TOML chỉ chấp nhận cú pháp tên Biến = giá Trị, trong khi INI cho phép cả tên Biến = giá Trịtên Biến : giá Trị.
  • TOML chỉ hỗ trợ comment bằng #, có thể viết sau giá trị biến hoặc chiếm một dòng mới, còn INI hỗ trợ cả ;# cho comment, thường chiếm một dòng riêng.
  • TOML cho phép嵌套 các trường, trong khi INI không hỗ trợ.
  • Trong TOML, tên các tùy chọn (biến) là case-sensitive, ví dụ như host. Trong INI, tên các tùy chọn không phân biệt case.

Cấu trúc tệp TOML có tính dễ đọc và dễ viết, đồng thời hỗ trợ các tính năng cao cấp như comment và chuỗi nhiều dòng. Bạn có thể tham khảo tài liệu chính thức của TOML để biết thêm chi tiết và các ví dụ sử dụng.

Tham khảo: Tài liệu chính thức TOML

Thẻ: TOML python cấu hình tệp từ điển danh sách

Đăng vào ngày 23 tháng 5 lúc 02:59