Python đọc tệp ini vào từ điển

Bạn đang viết một chương trình học sâu và muốn lưu trữ một số tham số chính vào tệp cấu hình. Bạn muốn sử dụng các giá trị trong cấu hình làm giá trị tham số để đào tạo mô hình như đường dẫn tập dữ liệu, trình tối ưu hóa, tốc độ học tập, số lượng kỷ nguyên, v.v.

lớp configparser thực hiện cấu trúc cấu hình cơ bản có các phần chứa các cặp khóa-giá trị

Tệp cấu hình có thể được đọc cũng như các cài đặt cấu hình mới có thể được ghi hoặc cập nhật

Tạo tệp ini để lưu cài đặt cấu hình

Bạn có thể sử dụng bất kỳ trình soạn thảo văn bản nào để tạo tệp ini. Tôi đã sử dụng một notepad

  • Tệp cấu hình bao gồm [phần] theo sau là cặp khóa-giá trị. Các giá trị được phân tách khỏi các khóa bằng cách sử dụng “=” hoặc “. ”
  • Tên phần phân biệt chữ hoa chữ thường nhưng các phím không phân biệt chữ hoa chữ thường
  • Các khóa có thể chứa hoặc không chứa giá trị. Khi các giá trị không xuất hiện cho các khóa, hãy đảm bảo bao gồm “. ” hoặc “=” nếu không bạn sẽ gặp lỗi
  • Các khóa và giá trị có thể có khoảng trắng trước và sau khi chúng bị xóa khi đọc tệp cấu hình
  • Các giá trị cho khóa có thể được trải rộng trên nhiều dòng với thụt đầu dòng thích hợp. Nếu giá trị cho khóa trải rộng trên nhiều dòng không được thụt lề chính xác, thì chúng tôi sẽ gặp lỗi

Tệp ini mẫu

Đọc dữ liệu Cấu hình từ tệp ini

Để đọc tệp cấu hình, bạn cần nhập thư viện configparser. Mã bên dưới đọc tệp cấu hình, in tất cả các phần cùng với các cặp khóa-giá trị trong mỗi phần

import configparserfilename=r'test_config.ini'
config = configparser.ConfigParser[]

config.read[filename]
for sect in config.sections[]:
print["\nSection: ",sect]
for k,v in config.items[sect]:
print["Key: ",k," Value: ",v]

Đọc một giá trị duy nhất cho một khóa từ tệp cấu hình

Khi bạn đang đào tạo mô hình của mình, bạn có thể cần trích xuất một giá trị khóa duy nhất từ ​​tệp cấu hình hoặc trích xuất tất cả giá trị của các khóa trong một phần

Trích xuất giá trị cho khóa trình tối ưu hóa trong phần đào tạo

print[config['training']['optimizer']]

Trích xuất giá trị cho khóa epochs trong phần đào tạo và chuyển đổi nó thành int

print[int[config['training']['epochs']]]

Trích xuất tất cả các phần từ một tệp cấu hình

Các phần của tệp cấu hình sẽ được trả về dưới dạng danh sách

print[list[config.sections[]]]

Trích xuất tất cả các khóa từ một phần cụ thể của tệp cấu hình

Chúng tôi đang trích xuất tất cả các khóa trong phần đào tạo

print[list[config['training'].keys[]]]

Trích xuất tất cả các giá trị từ một phần cụ thể của tệp cấu hình

Chúng tôi đang trích xuất tất cả các giá trị cho tất cả các khóa trong phần đào tạo

print[list[config['training'].values[]]]

Cập nhật các giá trị cho các khóa trong một phần

Cập nhật các giá trị cho các khóa trong một phần hiện có cũng giống như ghi đè lên các giá trị

filename=r'test_config.ini'
config = configparser.ConfigParser[]
config.read[filename]
# the section checkpoint uppdate the value for model_file_name
config['Trained Model Details']={'model_file_name' :'classfication_epoch100.h5'}
with open[filename, 'w'] as configfile:
config.write[configfile]

Phần ‘Trained Model Details’ được cập nhật với giá trị “classfication_epoch100. h5” và key cho “checkpoint” bị xóa

Viết các mục bổ sung vào tệp Cấu hình

Có hai cách khác nhau để ghi các mục cấu hình vào tệp

  1. Tạo một từ điển các cặp khóa-giá trị với tên phần
#Adding additional entries into Config file
# creating the dictionary for section and key-value pairs
config['Layer 1']={
'no of hidden units':8,
'kernel_size':3,
'stride':2,
'activation':'relu'
}
# writing to configuration file
with open[filename, 'w'] as configfile:
config.write[configfile]

Mã này sẽ nối vào tệp cấu hình hiện có như hình bên dưới

Nếu bạn tạo một phiên bản của configparser, thì nó sẽ ghi đè lên các mục nhập hiện tại, như minh họa bên dưới

________số 8

Một phương pháp khác là sử dụng read_dict[], nó có cài đặt cấu hình trong một đối tượng từ điển trong đó khóa là tên phần và các cặp khóa-giá trị khác nhau là các giá trị của từ điển

config.read_dict[{'data':{'train_dir' : r'c:\dataset\train',
'test_dir': r'c:\dataset\test',
'val_dir': r'c:\dataset\val'
}
}]
with open[filename, 'w'] as configfile:
config.write[configfile]

Đoạn mã trên chưa thêm phần khác vào tệp cấu hình của chúng tôi

Nội suy cơ bản của các giá trị

Nội suy là khi giá trị cho các khóa trong tệp cấu hình được xử lý trước khi trả lại chúng

Cú pháp nội suy cơ bản. %[key_name]

Đoạn mã dưới đây tạo phần cấu hình “Đường dẫn” chứa hai khóa “home_dir” và “model_dir”. Giá trị cho khóa “model_dir” sẽ được tạo bằng cách thay thế “home_dir” bằng phép nội suy

print[config['training']['optimizer']]
0

giá trị cho model_dir sau khi nội suy

Nội suy mở rộng

Nội suy mở rộng là tiền xử lý và thay thế các giá trị cho một khóa từ một phần khác của tệp cấu hình trước khi trả lại chúng

Cú pháp nội suy mở rộng. ${phần. Chìa khóa}

Mã bên dưới sử dụng phép nội suy mở rộng từ khóa “home_dir” của phần “Đường dẫn“

print[config['training']['optimizer']]
1

Để đọc nội suy mở rộng, chúng ta cần đặt nội suy của tệp cấu hình thành ExtendedInterpolation[] để thay thế động

print[config['training']['optimizer']]
2

Phần kết luận

Thư viện configparser cung cấp một cách dễ dàng để quản lý cài đặt cấu hình bằng các cặp khóa-giá trị trong một phầ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. IN' ] # Nhận cấu hình "đường dẫn mặc định". 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

Làm cách nào để sử dụng Trình cấu hình trong Python?

Đọc và phân tích một tệp cấu hình, được cung cấp dưới dạng đối tượng tệp . Đọc cấu hình từ một chuỗi nhất định. Đọc cấu hình từ từ điển. Khóa là tên phần, giá trị là từ điển có khóa và giá trị nên có trong phần.

Trình cấu hình có được tích hợp trong Python không?

configparser đến từ Python 3 và do đó nó hoạt động tốt với Unicode. Thư viện thường được dọn sạch về mặt lưu trữ dữ liệu nội bộ và đọc/ghi tệp.

Chủ Đề