Xử lý file cấu hình INI trong Python

File INI là định dạng cấu hình phổ biến, thường dùng để lưu trữ các tham số ứng dụng dưới dạng văn bản thuần túy. Cấu trúc gồm các section (đoạn) được bao bởi dấu ngoặc vuông, bên trong chứa các cặp key-value.

[nguoi_dung]
ten = admin
mat_khau = 123456
la_quan_tri = true

[csdl]
dia_chi = 10.10.10.10
cong = 3306
co_so_du_lieu = apitest
nguoi_dung = root
mat_khau = 123456

[nhat_ke]
tep_tin = app.log
muc_do = info

Đọc dữ liệu từ file INI

Sử dụng module configparser có sẵn trong Python:

from configparser import ConfigParser

cau_hinh = ConfigParser()
cau_hinh.read('cau_hinh.ini', encoding='utf-8')

# Truy cập giá trị
print(cau_hinh['nguoi_dung']['ten'])

# Các phương thức hữu ích
print(cau_hinh.sections())                    # Danh sách tất cả section
print(cau_hinh.getint('csdl', 'cong'))       # Chuyển sang int
print(cau_hinh.getboolean('nguoi_dung', 'la_quan_tri'))  # Chuyển sang bool
print(cau_hinh.options('csdl'))              # Danh sách key trong section

Section mặc định và biến chung

Section [DEFAULT] cung cấp giá trị mặc định cho mọi section khác:

[DEFAULT]
nguoi_dung = admin
mat_khau = 123456

[moi_truong_dev]
duong_dan_co_so = http://localhost:7777

[moi_truong_test]
duong_dan_co_so = http://test.example.com

Khi truy vấn cau_hinh['moi_truong_dev']['nguoi_dung'], hệ thống sẽ tự động trả về giá trị từ DEFAULT nếu không tìm thấy trong section hiện tại.

Tham số hóa với Interpolation

Có thể sử dụng cú pháp %(ten_bien)s để tạo template động:

[DEFAULT]
duong_dan_api = %(dia_chi_goc)s/api?tham_so1=%(ts1)s&tham_so2=%(ts2)s
dia_chi_goc = https://api.example.org

[dev]
dia_chi_goc = http://localhost:8000
ts1 = gia_tri_1
ts2 = gia_tri_2

[san_xuat]
ts1 = du_lieu_thuc
ts2 = he_thong_chinh

Kết quả khi gọi cau_hinh['san_xuat']['duong_dan_api']:

https://api.example.org/api?tham_so1=du_lieu_thuc&tham_so2=he_thong_chinh

Ghi và chỉnh sửa file cấu hình

Tạo hoặc cập nhật file INI bằng các phương thức sau:

from configparser import ConfigParser

cau_hinh = ConfigParser()

# Thiết lập section mặc định
cau_hinh['DEFAULT'] = {
    'duong_dan_mau': '%(goc)s/xu_ly?dau_vao=%(dv)s',
    'goc': 'https://server.local'
}

# Thêm section mới
cau_hinh.add_section('cai_dat')
cau_hinh.set('cai_dat', 'che_do', 'debug')
cau_hinh.set('cai_dat', 'dv', 'test_data')

# Hoặc gán dictionary trực tiếp
cau_hinh['san_xuat'] = {
    'dv': 'production_data',
    'timeout': '30'
}

# Lưu vào file
with open('cau_hinh_moi.ini', 'w', encoding='utf-8') as tep:
    cau_hinh.write(tep)

Lưu ý: Tất cả giá trị đều phải là chuỗi. Module sẽ tự động xử lý kiểu dữ liệu khi đọc bằng các phương thức như getint(), getboolean().

Thẻ: python configparser ini-file configuration-management

Đăng vào ngày 16 tháng 6 lúc 02:24