Python đọc tập tin này

Trong Linux, người ta thường thấy ". conf" thay vì ". tập tin này”. Các tệp conf trong Linux cũng giống như bất kỳ tệp văn bản nào khác và do đó, chúng có thể được cấu trúc theo bất kỳ cách nào. Nó phụ thuộc vào trình phân tích cú pháp cách nó diễn giải một ". tập tin conf”. Mô-đun ConfigParser của Python có thể phân tích cú pháp ". conf” [hoặc bất kỳ tiện ích mở rộng ngẫu nhiên nào khác], miễn là các tệp này được xác định bằng ngôn ngữ cấu hình tương thích với INI. Bài viết này sẽ giải thích về đọc và viết “. conf” trong Linux bằng phiên bản ổn định mới nhất của Python 3. Lưu ý rằng nếu bạn thay thế tất cả các lần xuất hiện của “. conf” trong bài viết này với “. ini”, kết quả sẽ giống nhau. Quy trình và mã được giải thích bên dưới hầu như cũng tương thích với Microsoft Windows, với một số khác biệt nhỏ. Mặc dù những khác biệt này sẽ không được đề cập trong bài viết này

Mô-đun trình phân tích cú pháp cấu hình

Trình phân tích tệp cấu hình hoặc ConfigParser là một mô-đun Python cho phép bạn đọc và ghi các tệp cấu hình được sử dụng trong các ứng dụng Python. Như đã giải thích ở trên, mô-đun này hỗ trợ cú pháp tệp INI. Rất đơn giản”. cái này" / ". conf” trông như thế này

[DEFAULT]
âm thanh = 1
âm nhạc = 1
âm lượng = 0. 8
độ phân giải = 1920x1080
[Người dùng]

# âm thanh có thể có giá trị 0 [sai] và 1 [đúng] nếu có thể
âm thanh = 1
; . 4
music = 0
Volume = 0.4
độ phân giải = 1280x720

ví dụ”. conf” ở trên có hai phần là “DEFAULT” và “User”. Thông thường các chương trình Python được mã hóa theo cách mà các giá trị của phần MẶC ĐỊNH không bao giờ bị thay đổi. Mục DEFAULT dùng để đặt lại các giá trị tổng thể hoặc riêng lẻ về giá trị mặc định. Phần người dùng phản ánh những thay đổi được thực hiện bởi người dùng cuối đang sử dụng chương trình Python. Lưu ý rằng tên phần có thể là bất cứ thứ gì và không nhất thiết phải có phần MẶC ĐỊNH. Tuy nhiên, bất cứ khi nào có phần “DEFAULT” [tên phải viết hoa], nó sẽ được sử dụng để cung cấp các giá trị mặc định một cách an toàn nếu ConfigParser không thể phân tích cú pháp một số biến nhất định. Logic để xử lý các phần này, các biến bên dưới chúng và các giá trị dự phòng phải được xác định trong chính chương trình Python. Các ký hiệu như “#” và “;” . tập tin conf”. Tất cả các cặp khóa-giá trị trong tệp cấu hình không phân biệt chữ hoa chữ thường, thường được viết bằng chữ thường

Xử lý kiểu dữ liệu bằng ConfigParser

Trước khi tiếp tục với một số ví dụ về Trình cấu hình, điều quan trọng là phải hiểu cách xử lý kiểu dữ liệu của mô-đun này. Đối với Trình cấu hình, mọi đoạn mã được viết hoặc phân tích cú pháp đều là một chuỗi. Nó không thể phân biệt giữa các số hoặc bất kỳ định dạng nào khác. Lập trình viên cần viết logic trong chương trình của họ để chuyển đổi chuỗi “1234” thành số bằng cách sử dụng int[“1234”] trong khi đọc dữ liệu từ “. tập tin conf”

Mặc dù chuyển đổi sang số bằng phương thức int và float là một nhiệm vụ khá dễ dàng, nhưng việc chuyển đổi sang boolean có thể phức tạp vì Python coi bool[“any_string”] là True. Để khắc phục vấn đề này, bạn có thể sử dụng các câu lệnh điều kiện để kiểm tra một chuỗi cụ thể. Mô-đun ConfigParser cũng cung cấp một phương thức gọi là “getboolean[]”. Phương pháp này có thể phân biệt chính xác các giá trị boolean 'yes'/'no', 'on'/'off', 'true'/'false' và '1'/'0′ ngay cả khi chúng là các chuỗi. ConfigParser cũng bao gồm các phương thức getint[] và getfloat[] để thuận tiện cho bạn

Viết và lưu tệp Conf mới bằng ConfigParser

Giả sử ". conf” được đề cập ở trên không tồn tại và bạn muốn tạo nó tự động trong lần khởi chạy đầu tiên của chương trình. Đoạn mã dưới đây sẽ tạo một “settings” mới. conf” trong thư mục mà chương trình Python đang chạy

nhập trình phân tích cú pháp cấu hình

config = trình phân tích cú pháp cấu hình. Trình phân tích cấu hình[]

config [ 'DEFAULT'] = {"âm thanh" . "1", "âm nhạc" . "1",
"âm lượng" . "0. 8", "độ phân giải" . "1920x1080"}

config ['Người dùng'] = {"sound" : "1", "music" : "1",
"volume" : "0.8", "resolution" : "1920x1080"}

with open['settings.conf', 'w'] as configfile:
    config.write[configfile]

Câu lệnh đầu tiên trong đoạn mã trên nhập mô-đun ConfigParser. Câu lệnh thứ hai tạo một đối tượng giống như từ điển có tên là "config". Giờ đây, bạn có thể sử dụng cú pháp từ điển Python tiêu chuẩn để xác định các phần và biến được bao gồm bên dưới chúng, thể hiện rõ trong hai câu lệnh tiếp theo. Cuối cùng, câu lệnh “with open” tạo ra một “settings. conf” và ghi các phần cấu hình vào tệp

Đoạn mã trên hoạt động, nhưng có một vấn đề nhỏ với nó. Nó tạo một tệp cài đặt mới mỗi khi chương trình được chạy, dẫn đến việc ghi đè bất kỳ người dùng nào đã thực hiện chỉnh sửa đối với tệp cài đặt. Để khắc phục sự cố này, bạn cần kiểm tra hai điều kiện

  • Tệp cài đặt có tồn tại không?
  • Tệp cài đặt tồn tại, nhưng nó có chứa bất kỳ dữ liệu nào không?

Mã được sửa đổi bên dưới sẽ kiểm tra hai điều kiện và sẽ chỉ tạo tệp cài đặt mới nếu hai điều kiện này được đáp ứng

nhập trình phân tích cấu hình
nhập os
 
config = trình cấu hình. Trình phân tích cấu hình[]
config [ 'DEFAULT'] = {"âm thanh" . "1", "âm nhạc" . "1",
"âm lượng" . "0. 8", "độ phân giải" . "1920x1080"}

config ['Người dùng'] = {"sound" : "1", "âm nhạc" . "1",
"âm lượng" . "0. 8", "độ phân giải" . "1920x1080"}

settings_file = os . đường dẫn . tên thư mục[os . đường dẫn . đường dẫn thực[ __file__ ]]
+ os . sep + "cài đặt. conf"

nếu không os . đường dẫn . tồn tại[ settings_file ]
    < /a> or os . stat[ settings_file ] . st_size == 0 .
    với mở['cài đặt. conf', 'w'] as tệp cấu hình.
      cấu hình. ghi[ tệp cấu hình ]

Câu lệnh thứ hai trong đoạn mã trên nhập mô-đun “os”. Biến “settings_file” lưu trữ đường dẫn đầy đủ đến “settings. conf” sẽ được tạo trong thư mục của tập lệnh Python. Câu lệnh tiếp theo kiểm tra hai điều kiện nêu trên. Mệnh đề đầu tiên trong tuyên bố là tự giải thích. Mệnh đề thứ hai kiểm tra xem kích thước tệp có phải là "0 byte" không. Tệp 0 byte có nghĩa là tệp trống không có dữ liệu được lưu trữ trong đó. Phần còn lại của mã giống như ví dụ đầu tiên đã nêu ở trên

Cho đến nay, các mẫu mã được giải thích ở trên lưu tệp cấu hình trong thư mục của chính tập lệnh Python. Tuy nhiên, thông lệ phổ biến và tiêu chuẩn máy tính để bàn miễn phí là lưu các tệp cấu hình trong “. config” trong thư mục home. Mẫu mã bên dưới sẽ tạo một “settings” mới. conf" trong "~/. thư mục config/testapp”

nhập trình phân tích cấu hình
nhập os
 
app_name = "testapp"
config_folder = os . đường dẫn . tham gia[os . đường dẫn . trình mở rộng["~"], '. config', app_name ]
os . makedirs[ config_folder , tồn tại_ok =Đúng]

settings_file = "cài đặt. conf"

full_config_file_path = os . đường dẫn . tham gia[ config_folder , settings_file ]
 
config = configparser. Trình phân tích cấu hình[]

config [ 'DEFAULT'] = {"âm thanh" . "1", "âm nhạc" . "1",
"âm lượng" . "0. 8", "độ phân giải" . "1920x1080"}
config ['Người dùng'] = {"sound" : "1", "âm nhạc" . "1",
"âm lượng" . "0. 8", "độ phân giải" . "1920x1080"}
 
if không os . đường dẫn . tồn tại[ full_config_file_path ]
    < /a> or os . stat[ full_config_file_path ] . st_size == 0 .
    với mở[ full_config_file_path< /a> , 'w'] as tập tin cấu hình.
      cấu hình. ghi[ tệp cấu hình ]

Đoạn mã trên gần giống với ví dụ trước, ngoại trừ việc nó thay đổi vị trí của “settings. conf” thành “~/. cấu hình/testapp/cài đặt. conf". Biến “config_folder” lưu trữ đường dẫn đầy đủ đến thư mục ứng dụng sẽ được tạo trong “. config” thư mục [“~/. config/testapp/"]. “hệ điều hành. makedirs” sẽ chỉ tạo một thư mục ứng dụng mới nếu nó chưa tồn tại. Biến “full_config_file_path” lưu trữ đường dẫn đầy đủ của tệp cài đặt [“~/. cấu hình/testapp/cài đặt. conf"]. Phần còn lại của mã là tự giải thích

Đọc tệp Conf bằng ConfigParser

Phân tích tệp cấu hình khá đơn giản. Trình cấu hình cố gắng đọc một giá trị bằng các phương thức get[], getfloat[], getboolean[] hoặc cú pháp từ điển. Trong trường hợp lỗi khóa, các giá trị từ phần MẶC ĐỊNH hoặc giá trị dự phòng được sử dụng. Đó là một cách thực hành tốt để xác định các phần MẶC ĐỊNH hoặc giá trị dự phòng để ngăn các lỗi chính. Bạn cũng có thể sử dụng các câu lệnh ngoại trừ thử để loại bỏ lỗi

config = . Trình phân tích cấu hình[]
config. đọc[ full_config_file_path ]
 < /a>
is_sound_on = config ['Người dùng '] . getboolean['sound']
volume_level = config ['Người dùng'] . getfloat['volume']
độ phân giải = cấu hình ['Người dùng']['giải pháp']
 < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=44># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH.
# Fallback value "False" will be ignored as there is already a DEFAULT section.
# Trong trường hợp không có phần MẶC ĐỊNH, giá trị dự phòng sẽ được sử dụng.
is_music_on = config [' Người dùng'] . getboolean['âm nhạc', Sai]
 
in [ is_sound_on , is_music_on , volume_level , độ phân giải ]

Trong mẫu mã ở trên, “config. câu lệnh read” được sử dụng để đọc dữ liệu từ tệp cấu hình. Trong các câu lệnh sau, nhiều phương thức get tích hợp sẵn và ký hiệu từ điển được sử dụng để đọc dữ liệu. Trong khai báo biến "is_music_on", đối số thứ hai là giá trị dự phòng [Sai]. Lưu ý rằng các giá trị dự phòng sẽ có mức ưu tiên thấp hơn các giá trị được xác định trong phần MẶC ĐỊNH. Nói một cách dễ hiểu, các giá trị dự phòng sẽ không có hiệu lực khi đã có một cặp khóa-giá trị trong phần MẶC ĐỊNH

Mã đầy đủ

Dưới đây là toàn bộ mã kết hợp cả việc tạo tệp cấu hình lần chạy đầu tiên và đọc tệp cấu hình

#. /usr/bin/python3
nhập configparser
nhập os
 
app_name = "testapp"
config_folder = os . đường dẫn . tham gia[os . đường dẫn . trình mở rộng["~"], '. config', app_name ]
os . makedirs[ config_folder , tồn tại_ok =Đúng]
settings_file = "cài đặt. conf"
full_config_file_path = os . đường dẫn . tham gia[ config_folder , settings_file ]
 
config = configparser. Trình phân tích cấu hình[]
 
config< /a> ['DEFAULT'] = {"âm thanh" . "1", "âm nhạc" . "1",
"âm lượng" . "0. 8", "độ phân giải" . "1920x1080"}

config ['Người dùng'] = {"sound" : "1", "âm nhạc" . "1",
"âm lượng" . "0. 8", "độ phân giải" . "1920x1080"}
 
if không os . đường dẫn . tồn tại[ full_config_file_path ]
    < /a> hoặc os . stat[ full_config_file_path ] . st_size == 0 .
    với mở[ full_config_file_path< /a> , 'w'] as tập tin cấu hình.
      cấu hình. ghi[ tệp cấu hình ]
 < /a>
config. đọc[ full_config_file_path ]
is_sound_on = cấu hình ['Người dùng'] . getboolean['sound']
volume_level = config ['Người dùng'] . getfloat['volume']
độ phân giải = cấu hình ['Người dùng']['giải quyết']
 < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH. < a i=184># Giá trị dự phòng "Sai" sẽ bị bỏ qua vì đã có phần MẶC ĐỊNH.
# Fallback value "False" will be ignored as there is already a DEFAULT section.
# Trong trường hợp không có phần MẶC ĐỊNH, giá trị dự phòng sẽ được sử dụng hợp lệ.
is_music_on = config [' Người dùng'] . getboolean['music', Sai]
 
in [ is_sound_on , is_music_on , volume_level , độ phân giải ]

Phần kết luận

ConfigParser trong Python cung cấp một cách hữu ích để xử lý các cài đặt của cả ứng dụng dòng lệnh và GUI Python. Các tệp cấu hình này cũng có thể được sử dụng làm cơ sở dữ liệu dựa trên văn bản nhẹ nhưng có thể không phù hợp với các kiểu dữ liệu nâng cao, bộ dữ liệu lớn và số lượng truy vấn lớn

Làm cách nào để đọc từ tệp INI bằng Python?

Tệp Python. # Đọc tệp và tạo nếu tệp không tồn tại config = iniFile[ 'FILE. INI' ] # Nhận cấu hình "default_path". default_path # Cấu hình in [chuỗi]/đường dẫn/tên in. default_path # Tạo hoặc cập nhật cấu hình.

cái gì là. INI tệp Python?

Tệp INI là tệp cấu hình cho phần mềm máy tính bao gồm nội dung dựa trên văn bản với cấu trúc và cú pháp bao gồm các cặp khóa-giá trị cho các thuộc tính và các phần tổ chức các thuộc tính

Mô-đun Configparser trong Python là gì?

Mô-đun configparser từ thư viện chuẩn của Python xác định chức năng đọc và ghi tệp cấu hình như được sử dụng bởi Microsoft Windows OS . Những tập tin như vậy thường có. tiện ích mở rộng NÀY. Tệp INI bao gồm các phần, mỗi phần được dẫn đầu bởi tiêu đề [phần]. Giữa các dấu ngoặc vuông, chúng ta có thể đặt tên của phần.

Làm cách nào để cài đặt Trình cấu hình trong Python?

Mã trên nhánh này phải hoạt động trên tất cả các phiên bản Python được hỗ trợ. Thử nghiệm với tox hoặc trong CI. .
trong 3. .
Kiểm tra tên mới trong __all__ và cập nhật nhập trong configparser. py phù hợp. .
Hợp nhất cam kết mới với chính. .
Thực hiện bất kỳ thay đổi tương thích trên chính. .
Cập nhật tài liệu và phát hành phiên bản mới

Chủ Đề