Python3 配置文件(configparser)(转载)
本文由 Luzhuo 编写,转发请保留该信息.
原文: http://blog.csdn.net/rozol/article/details/72793304
以下代码以Python3.6.1为例
Less is more!
configparser 可以读写和解析注释文件, 但是没有写入注释的功能
#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/26'
# config_configparser.py 配置文件
# configparser 可以读写和解析注释文件, 但是没有写入注释的功能 import configparser
import re config_str = '''
# 配置文件信息案例
[DEFAULT]
minSdkVersion = 15
targetSdkVersion = 24
versionName = 1.0.0
server action = yes [luzhuo.me]
user = luzhuo # This is a comments.
[mysql]
ip = 127.0.0.1
port = 3306
''' def config_write():
'''
生成配置文件, 字典的形式添加数据
''' config = configparser.ConfigParser() config['DEFAULT'] = {'minSdkVersion': '',
'targetSdkVersion': '',
'versionName': '1.0.0',
'server action': 'yes'} config['luzhuo.me'] = {}
config['luzhuo.me']['user'] = 'luzhuo' config['mysql'] = {}
topsecret = config['mysql']
topsecret['ip'] = '127.0.0.1'
topsecret['port'] = '' with open('config.ini', 'w') as configfile:
config.write(configfile) def config_read():
'''
解析配置文件
''' # 读取
config = configparser.ConfigParser()
config.read('config.ini') lists_header = config.sections() # 配置组名, ['luzhuo.me', 'mysql'] # 不含'DEFAULT'
print(lists_header) boolean = 'luzhuo.me' in config # 配置组是否存在
boolean = config.has_section("luzhuo.me")
print(boolean) user = config['luzhuo.me']['user']
print(user)
mysql = config['mysql']
mysql_ip = mysql['ip']
mysql_port = mysql['port']
print(mysql_ip, ":", mysql_port) for key in config['luzhuo.me']: # 遍历配置组的key, 与'DEFAULT'组的key
print(key) # 删除
sec = config.remove_section("luzhuo.me") # 删除
config.write(open("config.ini", "w")) # 写回去 # 添加
config.add_section("web.server")
config.write(open("config.ini", "w")) # 修改/添加
config.set("web.server", "http", "http://luzhuo.me")
config.write(open("config.ini", "w")) # 删除key
config.remove_option("mysql", "ip")
config.write(open("config.ini", "w")) def config_func():
'''
写入的值均为字符串
配合文件的节名称区分大小写, 键不区分大小写(可任意缩进), 注释用'#'和';'(用作整行前缀,可缩进,不推荐行内注释), 值可以跨越多行(要缩进,慎用), 键值分隔符'='和':'
DEFAULT无法移除,试图删除将引发ValueError, clear()保持原样, popitem()不返回
''' # --- ConfigParser 对象 ---
# 配置解析器, defaults:DEFAULT字典, dict_type:字典类型(默认:有序字典), allow_no_value:True是否接收不带值的选项(值为None),(默认False), delimiters:键值分隔符, comment_prefixes:整行注释符, inline_comment_prefixes:行内注释符(值之后), strict:是否去重:True(默认), empty_lines_in_values:值是否可以多行;(默认True),False(行标记选项的结尾), default_section:默认节的名称'DEFAULT', interpolation:插值, converters:转换器{类型转换器的名称, 从字符串转换所需数据的类型}{'dicimal': decimal.Decimal}
# class configparser.ConfigParser(defaults=None, dict_type=collections.OrderedDict, allow_no_value=False, delimiters=('=', ':'), comment_prefixes=('#', ';'), inline_comment_prefixes=None, strict=True, empty_lines_in_values=True, default_section=configparser.DEFAULTSECT, interpolation=BasicInterpolation(), converters={})
config = configparser.ConfigParser() # items(raw=False, vars=None) # 所有节(含DEFAULT) ItemsView(section_name, section_proxy)(可遍历对象)
ItemsView = config.items()
dicts = config.defaults() # DEFAULT字典
lists = config.sections() # 可用的节列表(不含DEFAULT)
# has_section(section) # 是否存在该节
boolean = config.has_section("mysql")
lists = config.options("mysql") # 指定节的选项列表(含DEFAULT)
boolean = config.has_option("mysql", "ip") # 是否存在指定节的选项 # read(filenames, encoding=None) # 尝试读取和解析文件名列表(不存在则忽略), 加载初始值调用read_file()要在read()之前调用
config.read("config.ini", encoding="utf-8-sig") # windows下用记事本保存utf8格式要用utf-8-sig编码集
# read_file(f, source=None) # 从f读取和解析配置数据, source:文件名
config.read_file(open('config.ini', encoding="utf-8-sig"))
# read_string(string, source='<string>') # 从字符串解析配置数据
config.read_string(config_str)
# read_dict(dictionary, source='<dict>') # 读取字典
config.read_dict({'section1': {'key1': 'value1',
'key2': 'value2'},
'section2': {'key3': 'value3',
'key4': 'value4'}
}) # get(section, option, *, raw=False, vars=None[, fallback]) # 获取指定节的选项值, fallback:为找到选项时的返回值
data_str = config.get("mysql", "ip", fallback=None)
# getint(section, option, *, raw=False, vars=None[, fallback]) # 获取整数(选项的值强转为整数)
data_int = config.getint("mysql", "port", fallback=-1)
# getfloat(section, option, *, raw=False, vars=None[, fallback])
data = float = config.getfloat("mysql", "port", fallback=-1)
# getboolean(section, option, *, raw=False, vars=None[, fallback])
data_bool = config.getboolean("DEFAULT", "server action", fallback=False) # 获取布尔值,不区分大小写,识别'yes'/'no','on'/'off','true'/'false','1'/'0' # write(fileobject, space_around_delimiters=True) # 将配置写入文件, space_around_delimiters:是否用空格分隔键值之间
config.write(open("config.ini", "w", encoding="utf-8"))
# add_section(section) # 添加节, 节重复DuplicateSectionError, 与默认节重复ValueError, 不是字符串TypeError
config.add_section("server.luzhuo.me")
# remove_section(section) # 删除节, 存在True,不存在False
boolean = config.remove_section("server.luzhuo.me")
# set(section, option, value) # 给指定的节设置值, 节不存在NoSectionError, option和value:选项和值为字符串,否则TypeError
config.set("server.luzhuo.me", "ip", "127.0.0.1")
# remove_option(section, option) # 删除选型, 不存在节NoSectionError, 选项存在True,不存在False
boolean = config.remove_option("server.luzhuo.me", "ip") # optionxform(option) # 子类重写该方法, 或 config.optionxform = str(str区分大小写) 修改, 用于选项名称转为在内部结构中使用的实现 configparser.MAX_INTERPOLATION_DEPTH # 使用默认插值时, 当raw=false,get()递归插值的最大深度 config.clear() # 所有节都包含'DEFAULT'值,对节的清空不会删除'DEFAULT'值
config.BOOLEAN_STATES.update({'enabled': True, 'disabled': False}) # 自定义boolean的判断
config.SECTCRE = re.compile(r"\[ *(?P<header>[^]]+?) *\]") # 自定义节头的编译与解析的正则表达式(去除左右空格) # --- 异常 ---
try: pass
except configparser.Error: pass # configparser异常的基类
except configparser.NoSectionError: pass # 未找到指定节
except configparser.DuplicateSectionError: pass # 节重复
except configparser.DuplicateOptionError: pass # 选项重复
except configparser.NoOptionError: pass # 未找到指定选项
except configparser.InterpolationError: pass # 插值异常的基类
except configparser.InterpolationDepthError: pass # 迭代次数超过MAX_INTERPOLATION_DEPTH
except configparser.InterpolationMissingOptionError: pass # 选项不存在
except configparser.InterpolationSyntaxError: pass # 替换源文本不符合语法
except configparser.MissingSectionHeaderError: pass # 没有节头
except configparser.ParsingError: pass # 解析文件错误 if __name__ == "__main__":
config_write()
config_read() # config_func()
Python3 配置文件(configparser)(转载)的更多相关文章
- python3使用ConfigParser从配置文件中获取列表
使用python3使用ConfigParser从配置文件中获取列表 testConfig.py #!/usr/bin/env python # coding=utf- __author__ = 'St ...
- 【python3】configparser读取ini配置文件
在应用过程中,发现下面这个问题: cf=configparser.ConfigParser()读取配置文件时,如果数据包含%这们析特殊符号,就会报出上面的错误,使用cf = configparser. ...
- Python3 配置文件 解析
/************************************************************************ * Python3 配置文件 解析 * 说明: * ...
- Python 读取写入配置文件 —— ConfigParser
Python 读取写入配置文件 —— ConfigParser Python 读取写入配置文件很方便,可使用内置的 configparser 模块:可查看源码,如博主本机地址: “C:/python2 ...
- python之模块配置文件ConfigParser(在python3中变化较大)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块ConfigParser(在python3中为configparser) #特别注意:py ...
- python3使用configparser读取配置文件
python2中的ConfigParser在python3中改成了configparser 1.配置文件格式是 [域名] k=v 2.代码示例:需要生成conf.ini配置文件如下:[config]v ...
- python3使用configparser解析配置文件
http://www.jb51.net/article/87402.htm 需要注意的是每一个字段后面的值外面没有引号,切记,自己第一次配置时,加了引号,搞了半天 没找到错误,, 在用Python做开 ...
- python3 利用configparser生成和读取配置文件
利用configparser生成和读取配置文件 #Author by Andy #_*_ coding:utf-8 _*_ import configparser ''' 配置文件格式 groupna ...
- Python3之configparser模块
1. 简介 configparser用于配置文件解析,可以解析特定格式的配置文件,多数此类配置文件名格式为XXX.ini,例如mysql的配置文件.在python3.X中 模块名为configpars ...
随机推荐
- 腾讯Hermes设计概要——数据分析用的是列存储,词典文件前缀压缩,倒排文件递增id、变长压缩、依然是跳表-本质是lucene啊
转自:http://data.qq.com/article?id=817 三.Hermes设计概要 架构描述 系统核心进程均采用分散化设计,根据业务发展需求,可随意扩缩容机器; 周期性数据直接通过td ...
- SVN与CVS比较-怎度网
SVN与CVS比较 所有的文档都显示SVN可以取代CVS,同时SVN的问题和缺点都被隐藏了.不幸的是,我们并不认为SVN是CVS的替代品,尽管很多缺陷都被修改了.更有甚者,它甚至让人重回VSS.CVS ...
- nginx开发_Filter模块执行顺序
Filter模块执行顺序 Filter模块的执行顺序是在执行configure文件时决定的,configure文件执行完成后生成objs/ngx_modules.c,文件中定义了一个数组ngx_mod ...
- bzoj4066
KD-tree 强制在线就不能愉快的做这道题了. 我们用KD-tree维护平面上的点,这样建出来的树高大概是log,复杂度过得去,但是插入过多会使树深很深,这样就能卡死,那么我们每个10000次插入就 ...
- MVC 登录后重定向回最初请求的 URL FormsAuthentication.RedirectFromLoginPage
在传统的Asp.net webForm 中如果使用 Form身份验证.登录后重定向到最初请求的页面只需使用 FormsAuthentication.RedirectFromLoginPage 但在MV ...
- 如何在ubuntu下使用windows下的程序(eg: .exe)
为了在ubutu下安装百度云管家,上网查了下如何在ubuntu 下安装.exe文件,其中遇到一些问题记录如下: 使用的命令: 开始时直接使用的sudo apt-get install wine 在运行 ...
- Google浏览器如何加载本地文件
Chrome浏览器加载本地文件 一般来说,为了安全起见,浏览器是不能通过load方法来加载本地文件的,load方法只能加载远程服务器上的文件. 在浏览器默认的情况下,试图加载一个本地文件,会出现交叉域 ...
- JAVA中的BIO,NIO,AIO
在了解BIO,NIO,AIO之前先了解一下IO的几个概念: 1.同步 用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪, 例如自己亲自出马持银行卡到银行取钱 2.异步 用户触发IO操作以后, ...
- spring使用过程中遇到的问题
1.出现这样的错误:The type org.springframework.core.NestedRuntimeException cannot be resolved. It is indirec ...
- 打造个人IP: 开源项目网站构建框架
前言 您是否正在寻找有关如何创建博客网站: 个人博客 或者 开源项目官网 : Dubbo, Vue.js的构建框架? 在这篇文章我将向您展示如何创建一个美观并且实用的开源博客/开源项目官网构建框架!近 ...