ini配置文件

简介: ini配置文件

ini配置文件

ini文件是initialization file的缩写,即初始化文件,是widows系统配置文件所采用的存储格式。

文件扩展名: .ini

ini配置文件的后缀名也不一定必须是.ini, 也可以是.cfg, .conf或者是.txt

ini文件格式

ini配置文件由参数, 节, 注解组成

参数(parameter)

以键值对的形式存在

name=value

每个参数都有一个name和一个value,name和value由等号=分隔

节(section)
  1. 所有的键值对都是以节section为单位结合在一起的
  2. 所有的section名称都是独占一行,并且section名字都被方括号包围着[ ]
  3. 在section声明后的所有parameters都属于这个section
  4. 一个section没有明显的结束标识符,一个section的开始就是上一个section的结束
  5. section不能重复,数据通过section去查找,每个seletion下可以有多个key和value的键值对
[section]
注解

comments使用分号表示, 在分号后面的文字,直到该行结尾全部为注解。

;comment ini文件的数据格式例子

例子

[Section1] ;section name
keyname1=value1
keyname2=value2
[Section2] ;section name
keyname3=value3
keyname4=value4

section用来表示一个段落,ini文件可能是项目中共用的,使用section段名来区分不同用途的参数区

;串口配置实例
[port]
portname=COM4
port=4

其他说明

  • 在windows系统中,INI文件很多,最重要的是System.ini , System32.ini 和 Win.ini
  • ini文件主要存放用户所作的选择以及系统的各种参数,用户可用通过修改ini文件,来改变应用程序和系统的很多配置
  • 从windows95开始,在windows系统中推出了注册表的概念,ini文件在windows系统的地位开始下降。注册表可以使程序和系统都把许多参数和初始化信息存放进注册表中。
  • 通常将服务器相关的配置信息写入到ini配置文件,然后ini配置文件的路径通过系统环境变量XXX_CONFIG_PATH来进行动态指定

ini配置文件(python)

python3中自带configparser模块来读取ini文件

import configparser
#文件路径
cfgpath = "cfg.ini"
# 创建管理对象
conf = configparser.ConfigParser()
# 读ini文件
conf.read(cfgpath,encoding="utf-8")     #python3需要加个参数:encoding="utf-8"
# 获取所有的section
sections = conf.sections()
print(sections)           # 返回list
items = conf.items('serialport')    # 参数是 section的名称
print(items)              # list里面对象是元祖
remove
# 删除一个section中的一个item(以键值KEY为标识)
conf.remove_option('serialport', "port")      # 参数  section名   key名
# 删除整个section这一项
conf.remove_section('serialport')
add
# 添加一个section
conf.add_section("serialport")
# 往section添加key和value
conf.set("serialport", "port", "com4")
write

write写入有两种方式

  1. 删除原文件内容,重新写入
conf.write(open(cfgpath, "w"))  # 删除原文件重新写入
  1. 在原文件基础上继续写入内容,追加模式
conf.write(open(cfgpath, "a"))  # 追加模式写入

remove和set方法并没有真正的修改ini文件内容,只有当执行conf.write()方法的时候,才会修改ini文件内容

写入中文的话,需要加上写入的编码格式:encoding=“utf-8”

# 修改section里面的值
conf.set("week", "day", "星期一")  # 写入中文
conf.write(open(cfgpath, "a", encoding="utf-8"))  # a模式 编码格式
python例子
  1. config.ini文件
[strings] 
#Mode: train, test, serve配置执行器的工作模式 
mode = train 
#配置模型文件的存储路径 
working_directory = model 
#配置训练文件的路径 
dataset_path=train_data/ 
[ints] 
#配置分类图像的种类数量 
num_dataset_classes=10 
#配置训练数据的总大小 
dataset_size=50000 
#配置图像输入的尺寸 
im_dim=32 
num_channels = 3 
#配置训练文件的数量 
num_files=5 
#配置每个训练文件中的图像数量 
images_per_file=10000 
#配置批训练数据的大小 
batch_size=32 
[floats] 
#配置Dropout神经元失效的概率 
rate=0.5
  1. 解析
import configparser 
#定义读取配置文件函数,分别读取section的配置参数,section包括ints、floats、strings 
def get_config(config_file='./config.ini'): 
    parser=configparser.ConfigParser() 
    parser.read(config_file,encoding="utf-8") 
    #获取整型参数,按照key-value的形式保存 
    _conf_ints = [(key, int(value)) for key, value in parser.items ('ints')] 
    #获取浮点型参数,按照key-value的形式保存 
    _conf_floats = [(key, float(value)) for key, value in parser.items ('floats')] 
    #获取字符型参数,按照key-value的形式保存 
    _conf_strings = [(key, str(value)) for key, value in parser.items ('strings')] 
    #返回一个字典对象,包含读取的参数 
    print(_conf_ints)
    return dict(_conf_ints + _conf_floats + _conf_strings)

返回的就是 字典类型

ini配置文件(c语言)

详细可以参考: https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprivateprofileint

write
  • WritePrivateProfileString
BOOL WritePrivateProfileString(
  [in] LPCSTR lpAppName,
  [in] LPCSTR lpKeyName,
  [in] LPCSTR lpString,
  [in] LPCSTR lpFileName
);
  • lpAppName
    节section名
  • lpKeyName
    键值对的键名,如果为NULL,删除整个节
  • lpString
    键值对的值,如果为NULL,对应的键将被删除
  • lpFileName
    ini文件路径及名称
  • 返回值:成功非0,失败0
read
  • GetPrivateProfileInt
UINT GetPrivateProfileInt(
  [in] LPCTSTR lpAppName,
  [in] LPCTSTR lpKeyName,
  [in] INT     nDefault,
  [in] LPCTSTR lpFileName
);
  • lpAppName 节名
  • lpKeyName 键名
  • nDefault 默认值,如果没找到则返回
  • lpFileName ini文件名
  • 返回键对应的值,失败返回默认值
  • GetPrivateProfileString
DWORD GetPrivateProfileString(
  [in]  LPCTSTR lpAppName,
  [in]  LPCTSTR lpKeyName,
  [in]  LPCTSTR lpDefault,
  [out] LPTSTR  lpReturnedString,
  [in]  DWORD   nSize,
  [in]  LPCTSTR lpFileName
);
  • lpReturnedString 接收返回数组的buf
  • nSize buf的大小
  • 返回复制到lpReturnedString中的字节数
c例子
  1. 读配置文件
[strings] 
mode = train 
[ints] 
dataset_size=50000 
[floats]
rate=0.5
#include <stdio.h>
#include <windows.h>
int main(){
  char mode [50];
  int mode_len =  GetPrivateProfileString(
        "strings",
        "mode",
        NULL,
        mode,
        50,
        "./config.ini"
  );
  
  int dataset_size = GetPrivateProfileInt(
          "ints",
          "dataset_size",
          0,
          "./config.ini"
  );
  printf("mode: %s\r\n",mode);
  printf("dataset_size: %d\r\n",dataset_size);
  
  return 0;
}
  1. 读浮点数
    没有内置读浮点数的函数,需要自己实现一个。
float GetPrivateProfileFloat(LPCSTR lpAppName,LPCSTR lpKeyName,INT nDefault,LPCSTR lpFileName)
{
  float f = nDefault;
  char strValue[50] = {0};
  GetPrivateProfileString(lpAppName,lpKeyName,"",strValue,50,lpFileName);
  if(strlen(strValue) != 0){
    f= (float)atof(strValue);
  }
  return f;
}

参考

微软手册: https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprivateprofileint

相关文章
|
PHP
php-fpm的重启方法
php-fpm的重启方法
1775 0
|
8月前
|
Go
Go语言接口的定义与实现
Go 语言的接口提供了一种灵活的多态机制,支持隐式实现和抽象编程。本文介绍了接口的基本定义、实现方式、空接口的使用、类型断言以及接口组合等核心概念,并探讨了接口与 nil 的关系及应用场景。通过示例代码详细说明了如何利用接口提升代码的可扩展性和可测试性,总结了接口的关键特性及其在依赖注入、规范定义和多态调用中的重要作用。
331 14
|
9月前
|
运维 Docker 容器
最简 Odoo 部署方法:Websoft9 企业应用托管平台
Odoo手工部署通常依赖Docker,需依次完成Docker安装、镜像拉取与容器运行,但存在安装复杂、镜像下载慢、配置繁琐及管理困难等问题。Websoft9提供了解决方案:通过云原生模板和自动化工具简化部署。仅需登录Websoft9控制台选择Odoo版本并绑定服务器,创建数据库后初始化,最后登录后台完成设置,大幅降低部署难度与运维成本。
255 0
  最简 Odoo 部署方法:Websoft9 企业应用托管平台
|
10月前
|
数据安全/隐私保护
基于PID控制器的双容控制系统matlab仿真
本课题基于MATLAB2022a实现双容水箱PID控制系统的仿真,通过PID控制器调整泵流量以维持下游水箱液位稳定。系统输出包括水位和流量两个指标,仿真结果无水印。核心程序绘制了水位和流量随时间变化的图形,并设置了硬约束上限和稳态线。双容水箱系统使用一阶线性微分方程组建模,PID控制器结合比例、积分、微分作用,动态调整泵的输出流量,使液位接近设定值。
|
数据采集 监控 安全
智能辅助快运装车规划系统整体建设方案
本方案为一家全国性快运企业设计,针对其分拣与装车过程中的问题,提出了一套全面的智能辅助快运装车规划系统。该系统通过多源货品整合、优先级驱动的配送安排、地址信息精准转化等功能,结合先进的智能算法,实现高效的装车与配送规划,从而提升调度精度、降低物流成本、提高配送效率。系统分六个阶段逐步建设,从基础平台搭建到持续优化,确保系统的高效运行与持续改进。
421 3
|
安全 物联网 网络架构
Zigbee—网络层地址分配机制
Zigbee—网络层地址分配机制
|
JSON Java 关系型数据库
【Feign】 基于 Feign 远程调用、 自定义配置、性能优化、实现 Feign 最佳实践
【Feign】 基于 Feign 远程调用、 自定义配置、性能优化、实现 Feign 最佳实践
771 0
|
存储 缓存 关系型数据库
Mysql/etc/my.cnf参数详解
以上只是 `/etc/my.cnf`中的部分参数,实际上,`/etc/my.cnf`中的参数非常多,可以根据具体的应用需求进行调整。
374 0
|
存储 API C++
【 QString接口大全】 Qt QString类使用示例
【 QString接口大全】 Qt QString类使用示例
638 1