前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >网罗几种中Python配置文件方式,总有一款适合你

网罗几种中Python配置文件方式,总有一款适合你

作者头像
追马
发布于 2020-07-06 08:42:13
发布于 2020-07-06 08:42:13
1.5K00
代码可运行
举报
文章被收录于专栏:一日一工具一日一工具
运行总次数:0
代码可运行

网罗几种中Python配置文件方式,总有一款适合你

提起Python的的配置文件,估计你去问10个人,每个人给你的答案多多少少都不一样,原因就是轮子太多了,并没有一个足够好到让大家普遍都接收的,所以在不适合场景的情况下,造轮子, 今天跟大家聊聊常用的集中配置方式。

configparser or ConfigParser

configparser or ConfigParser

configpare算是老牌的配置文件选择之一了,优点是标准库,不需要安装,但是需要注意的一点是,在Python2和Python3上使用方式略有差异

是否是标准库

标准库,Python2上和Python3上包名称有差异 不需要额外安装模块算是优点之一

python2中包名称首字母大写

python2文档[1]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import sys
>>> sys.version
'2.7.10 (default, Feb 22 2019, 21:55:15) \n[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)]'
>>>
>>>
>>> import ConfigParser
>>> config = ConfigParser.ConfigParser()
>>> config.readfp(open('example.ini'))

>>> config.get('topsecret.server.com', 'Port')
'50022'
>>>
>>> config.get('topsecret.server.com', 'ForwardX11')
'no'
>>>
python3中包名称首字母小写

python3文档[2]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import sys
>>> sys.version
'3.7.2 (default, Feb 24 2020, 13:04:30) \n[Clang 10.0.1 (clang-1001.0.46.4)]'
>>>
>>>
>>> import configparser
>>> config = configparser.ConfigParser()
>>> config.readfp(open('example.ini'))
/Users/admin/.pyenv/versions/3.7.2/bin/bpython:1: DeprecationWarning: This method will be removed in future ver
sions.  Use 'parser.read_file()' instead.
  #!/Users/admin/.pyenv/versions/3.7.2/Python.framework/Versions/3.7/bin/python
>>>
>>> config.get('topsecret.server.com', 'Port')
'50022'
>>>

pyyaml

随着yaml文件的普及,不少项目开始把自己的配置文件换成了yaml文件格式

是否是标准库

非标准库,需要单独安装,另外需要注意的是,yaml编写格式对齐有要求,一定要特别注意,常见的使用的有gitlab-ci的配置文件,k8s的配置文件等,还是比较普及的。

pyyaml[3]

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install pyyaml

演示

python2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import yaml
>>>
>>>
>>> config = yaml.safe_load(open('example.yaml'))
>>> config
{'name': 'zhuima', 'address': 'beijing'}
>>>
>>>
>>> import sys
>>> sys.version
'2.7.10 (default, Feb 22 2019, 21:55:15) \n[GCC 4.2.1 Compatible Apple LLVM 1
0.0.1 (clang-1001.0.37.14)]'
>>>
python3
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import yaml
>>> config = yaml.safe_load(open('example.yaml'))
>>> config
{'name': 'zhuima', 'address': 'beijing'}
>>>
>>> import sys
>>> sys.version
'3.7.2 (default, Feb 24 2020, 13:04:30) \n[Clang 10.0.1 (clang-1001.0.46.4)]'
>>>

json

说到yaml, 不得不说的那就是json,其实这个应该是写在yaml之前的,但是我个人觉得,这个可读性确实有点差,编辑的时候经常会出问题,所以就放在了后面

是否是标准库

标准库,无需单独安装,编辑的时候需要特别注意,避免语法错误

大家在看别人的代码的时候,可能会看到simplejson这个库,原因有几个:

•json是在python2.6的时候引入的,simplejson可以兼容更低版本的Python•simplejson比json块,最快的是cjson

json模块对比扩展阅读,文档很老了[4]

辅助工具

在线校验json[5]

simplejson[6]

演示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import json
>>>
>>> with open('example.json') as fp:
...     data = json.load(fp)
...
...
>>> 
>>> data
{u'name': u'zhuima', u'address': u'beijing'}
>>> data.get('name')
u'zhuima'
>>>
>>> sys.version
'2.7.10 (default, Feb 22 2019, 21:55:15) \n[GCC 4.2.1 Compatible Apple LLVM 1
0.0.1 (clang-1001.0.37.14)]'
>>>

python3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import json
>>>
>>>
>>> with open('example.json') as fp:
...     data = json.load(fp)
...
...
>>> data
{'name': 'zhuima', 'address': 'beijing'}
>>> data.get('address')
'beijing'
>>> import sys
>>>
>>> sys.version
'3.7.2 (default, Feb 24 2020, 13:04:30) \n[Clang 10.0.1 (clang-1001.0.46.4
>>> from dotenv import load_dotenv
>>>

python-dotenv

这个是我用的最多的,也是比较喜欢的一个模块,足够简单,配置就是键值对。

是否是标准库

非标准库,需要单独安装,不过支持比较广,对应的Flask, Django都有对应的包,仓库的地址

python-dotenv对应github仓库[7]

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install python-dotenv

演示

python2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from dotenv import load_dotenv
>>> import os
>>>
>>>
>>> ROOT = os.path.join(os.path.dirname('__file__'), '.')
>>>
>>> dotenv_path = os.path.join(ROOT, '.env')
>>>
>>>
>>> load_dotenv(dotenv_path)
True
>>>
>>> os.getenv('name')
'zhuima'
>>> os.getenv('address')
'beijing'
>>>
>>>
>>> import sys
>>> sys.version
'2.7.10 (default, Feb 22 2019, 21:55:15) \n[GCC 4.2.1 Comp
atible Apple LLVM 10.0.1 (clang-1001.0.37.14)]'
>>>

python3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from dotenv import load_dotenv
>>>
>>>
>>> import os, pathlib
>>>
>>> dotenv_path = pathlib.Path('.') / '.env'
>>> dotenv_path
PosixPath('.env')
>>> load_dotenv(dotenv_path
...
... )
True
>>>
>>> os.getenv('name')
'zhuima'
>>>
>>> os.getenv('address')
'beijing'
>>>
>>> import sys
>>> sys.version
'3.7.2 (default, Feb 24 2020, 13:04:30) \n[Clang 10.0.1 (clang-1001.0.46.4)]'
>>>

纯py文件(常量)

有的时候为了简单,或者说是省事,就把需要的常量定义到一个文件里,使用起来直接导入对应的包即可

演示

python2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import example_consts
>>> example_consts.ADDRESS
'beijing'
>>>
>>> example_consts.NAME
'zhuima'
>>>
>>> import sys
>>> sys.version
'2.7.10 (default, Feb 22 2019, 21:55:15) \n[GCC 4.2.1 Comp
atible Apple LLVM 10.0.1 (clang-1001.0.37.14)]'
>>>
python3
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import example_consts
>>> example_consts.ADDRESS
'beijing'
>>>
>>>
>>> example_consts.NAME
'zhuima'
>>>
>>>
>>> import sys
>>> sys.version
'3.7.2 (default, Feb 24 2020, 13:04:30) \n[Clang 10.0.1 (clang-1001.0.46.4)]'
>>>

类Django配置

工程化的时候,是需要区分环境的,不同的环境连接DB和中间件的地址或部分常量是有所差异的,这个时候就需要以环境区分来进行加载操作,一般是在入口文件里定义一个变量,启动时去读取这个变量,如果存在就按照指定环境的配置启动,如果没有显示定义,就按默认配置启动。

更多内容可以参考李辉大大的文档[8]

演示

定义配置文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# vim configmap.py

class Config():   
   AUTHOR='zhuima'

class DevelopmentConfig(Config):
   DEBUG = True
   SQL_URI='url'

class TestConfig(Config):
   SQL_URI='url'


class ProductionConfig(Config):
   SQL_URI='url'


config ={ 
   'dev':DevelopmentConfig,
   'test':TestConfig,
   'product':ProductionConfig,
   'default':DevelopmentConfig
}
引用配置文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from configmap import *

## 方式一
app.config.from_object(ProductionConfig)

## 方式二

app.config.from_object(config['product'])

总结

真的,写文档的时候真的是很难开头,因为甭管怎么写,都会被喷的,这方面的轮子实在是太多太多了,就不再一一演示了,有些场景下,但凡用着不爽,一个新的轮子就出来了,但是很多时候真的是不存在普适性,有大佬感兴趣的话,可以来一发,哈哈。

引用链接

[1] python2文档: https://docs.python.org/2/library/configparser.html [2] python3文档: https://docs.python.org/3/library/configparser.html [3] pyyaml: https://pyyaml.org/wiki/PyYAMLDocumentation [4] json模块对比扩展阅读,文档很老了: http://web.archive.org/web/20100814143114/http://deron.meranda.us/python/comparing_json_modules/ [5] 在线校验json: http://json.cn/ [6] simplejson: https://simplejson.readthedocs.io/en/latest/ [7] python-dotenv对应github仓库: https://github.com/theskumar/python-dotenv [8] 更多内容可以参考李辉大大的文档: https://zhuanlan.zhihu.com/p/24055329

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 链上追马 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
iOS设置圆角及圆形图片
方方正正的样式往往会显得很生硬,而圆角的样式会让人产生别样的亲切感,现在越来越多地用到圆角,诸如用户头像之类的图片也大都用圆形来显示,本文就介绍如何设置按钮、文本框的圆角以及制作圆形的图片。
Cloudox
2021/11/23
1.9K0
iOS设置圆角及圆形图片
iOS学习——核心动画之Layer基础
CALayer我们又称它叫做层。在每个UIView内部都有一个layer这样一个属性,UIView之所以能够显示,就是因为它里面有这个layer才具有显示的功能。我们可以通过操作CALayer对象,可以很方便地调整UIView的一些外观属性,可以给UIView设置阴影,圆角,边框等等...
mukekeheart
2018/08/01
1.6K0
iOS学习——核心动画之Layer基础
视觉效果 -- iOS Core Animation 系列三
本片文章前三章内容大家比较常用,后面的可能会不那么常用,前面的基础内容不想看了可以直接从第4段开始
Charlie_W
2018/10/19
1.2K0
视觉效果 -- iOS Core Animation 系列三
iOS开发——制作圆形头像
在iOS7之后,我们能发现许多应用都开始使用圆形来作为用户头像的形状,代表App就是腾讯QQ了,QQ的头像就是圆形的。
Originalee
2018/08/30
1.3K0
iOS-核心动画详解之CALayer
1. CALayer的基本操作. 1. CALayer简介: CALayer我们又称为层,在每个UIView内部都有一个layer的属性,UIView之所以能够显示,就是因为它里面有layer层,才具有显示的功能,我们通过操作CALayer对象,可以很方便地调整UIView的一些外观属性,例如可以给UIView设置阴影,圆角,边框等等... 2. 操作layer改变UIView外观. 2.1 设置阴影 //默认图层是有阴影的, 只不过是透明的。1为不透明,0为透明 _RedView.layer.sha
xx_Cc
2018/05/10
2.1K0
iOS设置视图圆角失效的解决方案
1、尝试设置_numberLab.clipsToBounds = YES;2、尝试设置 [self.numberLab layoutIfNeeded]; 之后再执行cornerRadius
公众号iOS逆向
2022/08/22
2.4K0
iOS设置视图圆角失效的解决方案
图层树和寄宿图 -- iOS Core Animation 系列一
一个视图就是在屏幕上显示的一个矩形块(比如图片,文字或者视频),它能够拦截类似于鼠标点击或者触摸手势等用户输入。视图在层级关系中可以互相嵌套,一个视图可以管理它的所有子视图的位置。 在iOS中,所有的视图都是从UIView这个基类派生出来的。UIView可以处理触摸时间,支持Core Graphics绘图,可以仿射变换等等操作。
Charlie_W
2018/10/19
1.3K0
图层树和寄宿图 -- iOS Core Animation 系列一
CALayer 图层概念二、CALayer属性二、方法
概念 CA -> Core Animation (核心动画) 相对更底层. CALayer负责视图中显示内容和动画.所有动画都是作用在CALayer上的. UIView负责监听和相应事件.UIView是更高层的封装 在 iOS 中,你能看得见,摸得着的东西基本上都是UIView.比如一个按钮,一个文本标签,一个文本输入框, 一个图标等.这些都是UIView,其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时, UIView内部会自动创建一个图层 (即CALayer对象
用户2141756
2018/05/18
1.6K0
iOS 页面渲染 - 离屏渲染
上周介绍了一下iOS 页面渲染-UIView & CALayer,本周我们来聊一聊 iOS 页面渲染中的高频面试题--离屏渲染。
CoderStar
2022/08/24
2.1K0
iOS 页面渲染 - 离屏渲染
面试题型—iOS离屏渲染探索
在平时的开发过程中,我们经常会听到离屏渲染这个词,在面试中也会经常被面试官问到,那么在iOS开发中到底什么是离屏渲染?离屏渲染有什么性能问题?离屏渲染是否应该完全禁止呢?
CC老师
2021/08/25
1.2K0
iOS开发——头像设置及本地沙盒保存,圆形头像显示
现在的APP中,对于头像的设置,我们大多采用圆形头像,并且需要支持从照相机获取或者从相册中选择用户需要的头像,并且保存在本地或者服务器中。
Originalee
2018/08/30
1.8K0
高性能设置圆角,告别离屏渲染
今天来写一个老生常谈的话题,也是一个面试的高频问题,我也在面试时不止一次被问到过这个问题——如何高性能的设置圆角。就用他作为2017年春节上班之后的第一篇文章。
Originalee
2018/08/30
9740
iOS动画-CALayer基础知识
核心动画Core Animation,其实是由Layer Kit这样一个名字演变而来。它实际上是一个复合引擎,可以将存储在图层树体系中的不同独立图层,尽可能快地组合成不同的可视内容呈现于屏幕上;所以做动画只是Core Animation的特性之一;
梧雨北辰
2019/04/22
2K0
iOS动画-CALayer基础知识
Quartz2D复习(四) --- 图层CALayer和动画CAAnimation
1)、在ios中,能看得见摸得着的东西基本上都是UIView, 比如按钮、文本标签、文本输入框、图标等,这些都是UIView
tandaxia
2018/09/27
1.6K0
Quartz2D复习(四) --- 图层CALayer和动画CAAnimation
iOS从Xib中设置样式
iOS在写视图的有的人喜欢纯代码去写,从之前的绝对定位方式(Frame),到现在的自动布局(Autolayout),但这种方式的好处是便于复制修改和装X,但是缺点是代码不容易看,不便于修改
码客说
2019/10/22
2.5K0
iOS 圆角和阴影并存的方法
Because shadow is an effect done outside the View, and that masksToBounds set to YES will tell the UIView not to draw everything that is outside itself.
freesan44
2019/04/29
3.8K0
iOS开发中设置圆角的方法
设置圆角的效果图: 方法一:使用代码设置 //第一步设置圆角的大小 //如果是设置为视图的高度的一半,则为半圆弧 _circleBtn.layer.cornerRadius = 5; //第二部:设置
梧雨北辰
2018/04/24
1.8K0
iOS开发中设置圆角的方法
开源项目——『看知乎』iOS 版
前段时间无意中发现了看知乎,一个知乎答案和用户的精选站。网站开发者是知乎用户苏莉安,他写了个爬虫从知乎抓取数据,而且还提供了 API 文档。我大致看了下文档,感觉写个 iOS 客户端应该也挺不错的,于是就开始写了。
Sheepy
2018/09/10
1.3K0
开源项目——『看知乎』iOS 版
OS 圆角图片
对于xib创建的cell,不能在- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier中修改属性,因为根本不会调用该方法,但是会调用awakeFromNib , 导入系统库<QuartzCore/QuartzCore.h>,再导入xib文件后会调用该方法.
艳艳代码杂货店
2021/10/30
1K0
iOS面试题-UI篇
面试题持续整理更新中,如果你正在面试或者想一起进阶,不妨添加一下交流群1012951431一起交流。
会写bug的程序员
2020/06/29
2.2K0
iOS面试题-UI篇
相关推荐
iOS设置圆角及圆形图片
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 网罗几种中Python配置文件方式,总有一款适合你
    • configparser or ConfigParser
      • configparser or ConfigParser
      • 是否是标准库
    • pyyaml
      • 是否是标准库
      • 安装
      • 演示
    • json
      • 是否是标准库
      • 辅助工具
      • 演示
      • python3
    • python-dotenv
      • 是否是标准库
      • 安装
      • 演示
      • python3
    • 纯py文件(常量)
      • 演示
    • 类Django配置
      • 演示
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档