ini配置文件
ini配置文件
ini文件是initialization file的缩写,即初始化文件,是widows系统配置文件所采用的存储格式。
文件扩展名: .ini
ini配置文件的后缀名也不一定必须是.ini, 也可以是.cfg, .conf或者是.txt
ini文件格式
ini配置文件由参数, 节, 注解组成
参数(parameter)
以键值对的形式存在
name=value
每个参数都有一个name和一个value,name和value由等号=分隔
节(section)
-
所有的键值对都是以节section为单位结合在一起的
-
所有的section名称都是独占一行,并且section名字都被方括号包围着[ ]
-
在section声明后的所有parameters都属于这个section
-
一个section没有明显的结束标识符,一个section的开始就是上一个section的结束
-
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写入有两种方式
-
删除原文件内容,重新写入
conf.write(open(cfgpath, "w")) # 删除原文件重新写入
-
在原文件基础上继续写入内容,追加模式
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例子
-
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
-
解析
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例子
-
读配置文件
[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; }
-
读浮点数
没有内置读浮点数的函数,需要自己实现一个。
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
相关文章:
ini配置文件
ini配置文件 ini文件是initialization file的缩写,即初始化文件,是widows系统配置文件所采用的存储格式。 文件扩展名: .ini ini配置文件的后缀名也不一定必须是.ini, 也可以是.cfg, .conf或者是.txt ini文件格式 ini配置文件由参数, 节, 注解组成 参…...
蓝桥杯备赛经验 pythonA组(非科班选手)
个人2022 CA组江苏省一等奖,决赛成绩不理想,没有拿到一二等奖,但是因为自己是非科班的学生,所以能拿到这样的成绩自己其实也应该知足了 题外话: 很多ACMer嘲笑蓝桥杯非常水,但是据我观察CA组决赛一等奖获奖…...

C++实现通讯录管理系统
通讯录是一个可以记录亲人、好友信息的工具,本博客借助黑马程序员的项目进行修改,利用C实现一个通讯录管理系统,旨在复习C的语法。 一、系统需求 系统需要实现的功能如下: 添加联系人∶向通讯录中添加新人,信息包括…...

开关电源Y电容放置的位置
Y电容,是我们工程师做开关电源设计时都要接触到的一个非常关键的元器件,它对EMI的贡献是相当的大的,但是它是一个较难把控的元器件,原理上并没有那么直观易懂,在EMI传播路径中需要联系到很多的寄生参数才能够去分析。 …...

二叉树的最小深度——递归法、迭代法
1题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root [3,9,20,null,null,15,7]输出:2示例 2:输入&…...
Vue中常使用的三种刷新页面的方式
一、通过js原始方法刷新 缺点: 出现闪白 目录 一、通过js原始方法刷新 二、通过Vue自带的路由进行跳转 三、通过在APP页面进行demo进行刷新(推荐) 1.vue2写法 2. vue3.2写法 <template><div><div class"header"><button clic…...

【Shell】脚本
Shell脚本脚本格式第一个Shell脚本:hello.sh脚本常用执行方式1. bash或sh脚本的相对路径或绝对路径2. 输入脚本的绝对路径或相对路径3. 在脚本的路径前加上.或者source脚本格式 脚本以#!/bin/bash开头(指定解析器) #! 是一个约定的标记&…...
Mybatis的多表操作
1.Mybatis多表查询 1.1一对一查询 1.一对一查询的模型 用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户2.创建Order和User实体public class…...
【JVM】字节码指令全解
文章目录 入门案例原始 java 代码编译后的字节码文件常量池载入运行时常量池方法字节码载入方法区main 线程开始运行,分配栈帧内存执行引擎开始执行字节码bipush 10istore_1ldc #3istore_2iload_1iload_2iaddistore_3getstatic #4iload_3invokevirtual #5return条件判断指令循…...

【精品】华为认证数通HCIA+HCIP题库分享(含答案解析)
嗨~大家好久不见,我是薄荷学姐,随着华为业务也全球领域的迅猛发展,越来越多人开始重视华为认证的重要性。今天给大家分享一下去年8月份的题库,基本都是一样,希望可以帮助到大家哈想要通过华为认证,除了进行…...
Qt cmake 资源文件的加载
Qt cmake 资源文件的加载概述qt_add_resourcesqt5_add_resourcesqt6_add_resources是否需要加载qrc文件需要加载qrc的情况不需要加载qrc的情况C 代码加载示例加载PNG加载CSS文件加载qrc文件Qt6相对于Qt5的一些变化Qt6和Qt5在加载资源文件方面的区别主要集中在两个方面ÿ…...

【链表OJ题(九)】环形链表延伸问题以及相关OJ题
环形链表OJ题 1. 环形链表 链接:141. 环形链表 描述: 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环&…...

【C++初阶】四、类和对象(下)
文章目录一、再谈构造函数构造函数体赋值初始化列表explicit关键字二、Static成员引入- 计算类中创建了多少个类对象概念特性静态成员函数的访问三、友元友元函数友元类四、内部类五、匿名对象六、拷贝对象时的一些编译器优化一、再谈构造函数 构造函数体赋值 在创建对象时&a…...

IDEA maven没有Import Maven projects automatically解决办法
去年装了个 IDEA2022版本 配置maven时我才发现是个大坑 他没有import Maven projects automatically配置项 当时看到我人都麻了 然后项目呢 用了依赖 这东西还不会自动下依赖 整的我那是相当难受 还在最后还是找到了解决办法 我们在配置文件上点击右键 然后鼠标选择如下图选项…...

Java实习生------MySQL10道面试题打卡
今日语录:“没有执行力,就没有竞争力 ”🌹 参考资料:图解MySQL、MySQL面试题 1、事务有哪些特性? 原子性: 一个事务中的所有操作,要么全部完成,要么全部不完成,不会出现…...
帆软报表设计器 数据集之数据库查询
当点击数据库查询时,调用TableDataTreePane的 public void actionPerformed(ActionEvent var1) {TableDataTreePane.this.dgEdit(this.getTableDataInstance().creatTableDataPane(), TableDataTreePane.this.createDsName(this.getNamePrefix()), false);} 然后调用TableDat…...
CSDN 第三十七期竞赛题解
很少有时间来玩玩题目,上一次因为环境极为嘈杂的原因在时间上没有进入前十,挺遗憾的。 在 CSDN 参加的第一次没出锅的比赛。 大概只有最后一题值得好好讲讲。 T1:幼稚班作业 幼稚园终于又有新的作业了。 老师安排同学用发给同学的4根木棒拼接…...
Vue实战【常用的Vue小魔法】
目录🌟前言🌟能让你首次加载更快的路由懒加载,怎么能忘?🌟你是否还记得有一个叫Object.freeze的方法?🌟异步组件那么强,你是不是没用过?🌟你是不是还在comput…...
用C跑爬虫
爬虫自指定的URL地址开始下载网络资源,直到该地址和所有子地址的指定资源都下载完毕为止。 下面开始逐步分析爬虫的实现。 待下载集合与已下载集合 为了保存需要下载的URL,同时防止重复下载,我们需要分别用了两个集合来存放将要下载的URL和…...

【C语言】你真的了解结构体吗
引言✨我们知道C语言中存在着整形(int、short...),字符型(char),浮点型(float、double)等等内置类型,但是有时候,这些内置类型并不能解决我们的需求,因为我们无法用这些单一的内置类型来描述一些复杂的对象,…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...