有时我们在项目开发中,需要读取配置文件,需要解析参数;
例:
[Main]
Frames=720
width=1249
position=-618.94
[Parameters]
Size=0
python 有现成的API 可以使用,这里形成一个类;
1.Code:
class ScanningParameters:
def __init__(self, parameters_str):
self.sections = {}
self.parse_parameters(parameters_str)
def parse_parameters(self, parameters_str):
current_section = None
for line in parameters_str.strip().splitlines():
line = line.strip()
if line.startswith('[') and line.endswith(']'):
current_section = line[1:-1]
self.sections[current_section] = {}
elif '=' in line and current_section:
key, value = line.split('=', 1)
key = key.strip()
value = value.strip()
if value.replace('.', '', 1).isdigit():
if '.' in value:
value = float(value)
else:
value = int(value)
self.sections[current_section][key] = value
def get_section(self, section):
return self.sections.get(section, {})
def get_value(self, section, key, as_type=None):
value = self.sections.get(section, {}).get(key, None)
if as_type and value is not None:
try:
return as_type(value)
except ValueError:
raise TypeError(f"Cannot convert value '{value}' to {as_type}")
return value
@staticmethod
def read_file_to_string(filepath):
with open(filepath, 'r', encoding='utf-8') as file:
return file.read()
# 示例用法
file_path = "config.ini"
parameters_text = ScanningParameters.read_file_to_string(file_path)
params = ScanningParameters(parameters_text) # 调用类
print(params.sections)
print(params.get_section("Main"))
print(params.get_value("Parameters", "Size"))
2. 如果需要参数转换类型:
转成 int
size = params.get_value("Motor Parameters", "Size", as_type=int)
转成 float
positionX= params.get_value("Motor Parameters", "position", as_type=float)
3.总结:
以上代码定义了一个 ScanningParameters 类,用于解析参数字符串并将其存储为类的属性。你可以通过 params.params 查看所有参数的字典形式;
例如 config.ini 文件。你可以使用 params.sections 查看所有解析的参数字典,或通过 params.get_section("部分名称") 和 params.get_value("部分名称", "键") 访问特定部分或参数