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().