常用的配置文件格式对比(ini,toml,yaml,json,env,settings.py)及应用程序修改自身配置并保留注释
代码与环境配置解耦
git分支的代码应做到“环境无关”:代码本身不硬编码任何环境特定的配置(如数据库连接、密钥、API地址),而是通过外部机制动态注入。
配置与代码分离:将配置信息存储在代码库之外(如环境变量、独立配置文件、密钥管理服务),避免提交到 Git 仓库。
- 环境变量:约 10 个变量(如数据库 URL、API 密钥、调试模式),总大小约 1KB。
- 配置文件:一个 500 行的 JSON 文件(约 5KB),解析后内存占用约 10-20KB。
- 总内存影响:不到 50KB,远低于一个简单 Python 对象(如空列表占用 40KB)。
对于YAML和TOML的选择来说,我更倾向于TOML,主要是TOML对缩进及空格数量不敏感,YAML的缩进和横杠-真烦啊!
各种配置文件的优缺点对比
| 配置格式 | 语法复杂度 | 结构化数据支持 | 注释支持 | 数据类型支持 | 适用场景 | 解析库 |
|---|---|---|---|---|---|---|
.ini | 低 | 差(仅支持键值对) | 是 | 否(所有值为字符串) | 小型应用 | configparser |
settings.py | 低 | 强(Python 代码) | 是 | 强 | Django/Python 项目 | Python 直接解析 |
.env | 低 | 差(仅键值对) | 是 | 否(所有值为字符串) | 12 Factor App | python-dotenv |
json | 中 | 强(嵌套支持) | 否 | 强 | Web 开发、API | json |
yaml | 中 | 强(嵌套支持) | 是 | 强 | DevOps、Kubernetes | PyYAML |
toml | 低 | 强(嵌套支持) | 是 | 强 | Python/Rust 配置 | toml |
选择合适的配置文件
- Web 开发/Django →
settings.py - 存储环境变量/API 密钥 →
.env - 前后端通用配置、API 交互 →
json - DevOps/Kubernetes →
yaml - Python、Rust 工程配置 →
toml - 小型桌面应用、简单配置 →
.ini
在 Web 应用中,使用数据库存储用户配置(如用户偏好、通知设置、API 密钥等)是一种常见的方法。与 .env、配置文件或环境变量相比,数据库存储具有更强的可管理性,但也存在一定的性能和安全性问题。下面是数据库存储用户配置的优缺点分析及实现方式。
Python 代码(Django ORM):
from django.db import modelsclass UserSettings(models.Model):user = models.OneToOneField("auth.User", on_delete=models.CASCADE)theme = models.CharField(max_length=50, default="light")notifications = models.BooleanField(default=True)language = models.CharField(max_length=10, default="en")updated_at = models.DateTimeField(auto_now=True)
查询用户配置:
settings = UserSettings.objects.get(user=request.user)
print(settings.theme) # "light"
应用程序修改自身配置并保留注释
通常情况下,配置文件(如 .ini, .env, .yaml, .toml, .json)主要用于存储应用的静态配置,而应用程序一般只读取配置。但在某些特定场景下,应用程序允许修改自身的配置文件。
| 配置格式 | 只读解析库 | 解决方案(修改保存) |
|---|---|---|
.ini | configparser | 使用 ConfigObj |
.env | dotenv_values | 手动读取/合并 |
.yaml | PyYAML | 使用 ruamel.yaml |
.toml | toml | 使用 tomlkit |
.json | json | 使用 commentjson |
from configobj import ConfigObjconfig = ConfigObj("config.ini", encoding="utf-8")# 修改配置
config["settings"]["theme"] = "dark"# 保存时会保留注释
config.write()
from tomlkit import parsewith open("config.toml", "r") as f:toml_data = parse(f.read())# 修改配置
toml_data["app"]["debug"] = False# 保存 (保留注释)
with open("config.toml", "w") as f:f.write(toml_data.as_string())
相关文章:
常用的配置文件格式对比(ini,toml,yaml,json,env,settings.py)及应用程序修改自身配置并保留注释
代码与环境配置解耦 git分支的代码应做到“环境无关”:代码本身不硬编码任何环境特定的配置(如数据库连接、密钥、API地址),而是通过外部机制动态注入。 配置与代码分离:将配置信息存储在代码库之外(如环…...
Java IO 和 NIO 的基本概念和 API
一、 Java IO (Blocking IO) 基本概念: Java IO 是 Java 平台提供的用于进行输入和输出操作的 API。Java IO 基于 流 (Stream) 的模型,数据像水流一样从一个地方流向另一个地方。Java IO 主要是 阻塞式 I/O (Blocking I/O),即线程在执行 I/O …...
小智AI桌宠机器狗
本文主要介绍如何利用开源小智AI制作桌宠机器狗 1 源码下载 首先下载小智源码,下载地址, 下载源码后,使用vsCode打开,需要在vscode上安装esp-idf,安装方式请自己解决 2 源码修改 2.1添加机器狗控制代码 在目录main/iot/things下添加dog.cc文件,内容如下; #include…...
MySQL 入门“鸡”础
一、Win10 与Ubuntu安装 以下是一篇针对 Ubuntu 安装 MySQL 的过程中写的示例: --- # Ubuntu 安装 MySQL 详细指南 在本教程中,我们将向您展示如何在 Ubuntu 上安装 MySQL,并完成基本的安全配置。以下是具体步骤: # 1. 安装 …...
Redis 中有序集合(Sorted Set)的使用方法
文章目录 前言1. 有序集合的特点2. 常用命令2.1 添加元素(ZADD)2.2 获取元素分数(ZSCORE)2.3 获取元素排名(ZRANK / ZREVRANK)2.4 获取范围内的元素(ZRANGE / ZREVRANGE)2.5 获取分数…...
WIn32 笔记:本专栏课件
专栏导航 上一篇:在VS2019里面,调整代码字体大小 回到目录 下一篇:无 本节前言 在之前的讲解里面,我讲解了 Visual Studio 软件的一些个基础操作步骤。从本节开始,我们进入预备章。 本节内容,属于是 …...
Unity git 获取当前修改或者新增的文件列表
直接上代码 using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text.RegularExpressions; using UnityEngine;public class GitFileStatusCheckerTools : MonoBehaviour {// 获取Git变更文件列表(新增/修…...
结构型模式 - 桥接模式 (Bridge)
结构型模式 - 桥接模式 (Bridge) 桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化。 // 软件接口,作为实现部分 interface Software {void run(); }// 游戏软件类,实现 Software 接口 class Game…...
如何让传统制造企业从0到1实现数字化突破?
随着全球制造业不断向智能化、数字化转型,传统制造企业面临着前所未有的机遇与挑战。数字化转型不仅是技术的革新,更是管理、文化、业务流程等全方位的变革。从零开始,如何带领一家传统制造企业走向数字化突破,是许多企业领导者面…...
【Elasticsearch】script_fields 和 runtime_fields的区别
script_fields和runtime_fields都是 Elasticsearch 中用于动态计算字段值的功能,但它们在实现方式、应用场景和性能表现上存在显著区别。以下是两者的详细对比: 1.定义和应用场景 • script_fields: • 定义:通过 Painless 脚本…...
城电科技|会追日的智能花,光伏太阳花开启绿色能源新篇章
当艺术与科技相遇,会碰撞出怎样的火花?城电科技推出的光伏太阳花,以其独特的设计与智能化的功能,给出了答案。这款产品不仅具备太阳能发电的实用功能,更是一件充满科技属性的艺术性光伏产品,吸引了广泛关注…...
【笔记ing】C语言补充、组成原理数据表示与汇编实战、操作系统文件实战(高级阶段)
【第19节 C语言语法进阶】 【19.1 条件运算符与逗号运算符】 1 条件运算符 条件运算符是C语言中唯一的一种三亩运算符。三目运算符代表有三个操作数;双目运算符代表有两个操作数,如逻辑运算符就是双目运算符;弹幕运算符代表有一个操作数&a…...
快节奏生活
在当今快节奏的商务环境中,效率成为了决定企业竞争力的关键因素之一。亿可达软件连接平台,以其独特的功能和优势,为职场人士带来了前所未有的便捷与高效,成为了众多用户心中的“宝藏”工具。 1、亿可达:自动化流程的搭…...
【音视频】音视频录制、播放原理
一、音视频录制原理 通常,音视频录制的步骤如下图所示: 我们分别从音频和视频开始采样,通过麦克风和摄像头来接受我们的音频信息和图像信息,这通常是同时进行的,不过,通常视频的采集会比音频的采集慢&…...
前端Sass面试题及参考答案
目录 什么是 Sass? Sass 和 CSS 的主要区别是什么? Sass 中如何处理列表? Sass 中如何处理映射(map)? Sass 中如何使用函数? Sass 中如何使用内置函数? Sass 中如何设置默认值? Sass 中的 @function 和 @mixin 有什么区别? Sass 中如何实现模块化? Sass 中…...
Web自动化之Selenium控制已经打开的浏览器(Chrome,Edge)
在使用selenium进行web自动化或爬虫的时候,经常会面临登录的情况,对于这种情况,我们可以利用Selenium控制已经打开的浏览器,从而避免每次都需要重新打开浏览器并进行登录的繁琐步骤。 目录 说明 启动浏览器 注意 --user-data-dir说明 代码设定 代码 改进代…...
AF3 unify_template_features 函数解读
AlphaFold3 data_pipeline 模块的 unify_template_features 函数用于将多条链的模板特征整合为一个统一的 FeatureDict,以适应对多链复合物的处理。每条链的模板特征经过索引偏移处理后,拼接为一个完整的模板特征矩阵。 该方法的核心在于: 序列对齐:根据每条链的长度,将模…...
FFmpeg.NET:.NET 平台上的音视频处理利器
FFmpeg.NET 是一个封装了 FFmpeg 功能的 .NET 库,能够方便地在 C# 项目中处理音视频文件。它支持多种操作,包括转码、剪辑、合并、分离音频等。 功能 解析元数据从视频生成缩略图使用以下参数将音频和视频转码为其他格式: 码率(…...
解决 Git 合并冲突:当本地修改与远程提交冲突时
目录 错误原因分析 解决方法 1. 暂存本地修改并合并(保留更改) 2. 丢弃本地修改(强制覆盖) 3. 暂存修改后合并(推荐:使用 git stash) 4. 选择性合并(手动处理冲突文件…...
SOME/IP-SD -- 协议英文原文讲解5
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.5 S…...
终极艾尔登法环帧率解锁与游戏增强完整指南:如何彻底释放高刷新率显示器潜力
终极艾尔登法环帧率解锁与游戏增强完整指南:如何彻底释放高刷新率显示器潜力 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.…...
Wan2.2-I2V-A14B项目实战:从零搭建个人AI艺术画廊网站
Wan2.2-I2V-A14B项目实战:从零搭建个人AI艺术画廊网站 1. 项目概述与价值 想象一下,你可以在自己的网站上展示由AI生成的独特艺术作品,让访客欣赏、点赞甚至参与创作。这正是我们将要实现的个人AI艺术画廊网站。这个项目不仅能让你的创意作…...
影墨·今颜小红书人像生成指南:3步打造电影质感东方写真
影墨今颜小红书人像生成指南:3步打造电影质感东方写真 "以泼墨之势,绘当代之影。" 你是否也曾被那些充满电影质感的小红书人像照片所吸引?那些光影交错、细节丰富、充满东方韵味的作品,现在通过「影墨今颜」AI影像系统&…...
【黑马点评日记02】:Session+ThreadLocal实现短信登录
🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或…...
Rust的匹配中的常量折叠
Rust的匹配中的常量折叠:高效模式匹配的幕后功臣 Rust以其出色的性能和安全性闻名,而模式匹配(match)是其核心特性之一。在编译阶段,Rust通过常量折叠(Constant Folding)优化匹配逻辑ÿ…...
NaViL-9B部署案例解析:上海AI实验室原生多模态模型生产实践
NaViL-9B部署案例解析:原生多模态模型生产实践 1. 平台概述 NaViL-9B是一款原生多模态大语言模型,具备同时处理文本和图像的能力。该模型支持纯文本问答和图片理解两大核心功能,能够实现: 传统文本对话交互图片内容识别与分析图…...
终极指南:gh_mirrors/ema/emacs.d的Vim模拟——Evil模式配置详解
终极指南:gh_mirrors/ema/emacs.d的Vim模拟——Evil模式配置详解 【免费下载链接】emacs.d Fast and robust Emacs setup. 项目地址: https://gitcode.com/gh_mirrors/ema/emacs.d 如果你是Vim爱好者但又想体验Emacs的强大功能,那么gh_mirrors/em…...
Phi-4-mini-reasoning环境配置:CUDA版本兼容性检查与nvidia-smi验证
Phi-4-mini-reasoning环境配置:CUDA版本兼容性检查与nvidia-smi验证 1. 环境准备与CUDA兼容性检查 在部署Phi-4-mini-reasoning模型前,确保您的GPU环境满足基本要求是至关重要的第一步。这个轻量级开源模型虽然对硬件要求相对友好,但仍需要…...
Qwen3-VL-8B图文模型新手教程:无需GPU,MacBook也能流畅运行
Qwen3-VL-8B图文模型新手教程:无需GPU,MacBook也能流畅运行 1. 引言 你是否曾经被AI模型的高硬件要求劝退?想象一下,当你看到"需要24GB显存的GPU"这样的配置要求时,是不是立刻打消了尝试的念头?…...
nli-distilroberta-base多场景:教育AI中错题归因与知识点描述逻辑关联
nli-distilroberta-base多场景:教育AI中错题归因与知识点描述逻辑关联 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务,专门用于分析两个句子之间的逻辑关系。在教育AI领域,这项技术可以发挥重…...
