configParser 模块用于操作配置文件

注:Parser汉译为“解析”之意。

配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。

为了更好的理解本文,我们先了解一下配置文件的组成及命名:配置文件(INI文件)由章节(section [sectionName] )、键、值组成(key=value or key:Value)。

# 新建一个config 文件 testconfig.ini

[DATABASE]
host = 50.23.190.57
username : TestYang
password = TestYang
port = 3306
database = TestDB

具体用法见一下代码,写的很详细了。

#-*-coding:utf-8-*-
# Time:2017/10/18 22:30
# Author:YangYangJun # 首先导入 ConfigParser 模块 import ConfigParser # 这里发现 上面这种大写与下面的小写都可以,只是导入的时候是如何写的,下面实例化的时候就如何写。 # import configparser configFile = 'testconfig.ini' # 1、创建ConfigParser 实例 config = ConfigParser.ConfigParser() # 2、读取配置文件 config.read(configFile) # 3、获取配置文件的章节序列 print config.sections() # ['DATABASE'] # 4、获取配置文件中对应章节所有键的序列 print config.options('DATABASE') # ['host', 'username', 'password', 'port', 'database'] # 5、获取配置文件中对应章节 对应键的值 print config.get('DATABASE','host') # 50.23.190.57 # 6、获取配置文件中对应章节的所有键值对 print config.items('DATABASE') # [('host', '50.23.190.57'), ('username', 'TestYang'), ('password', 'TestYang'), ('port', '3306'), ('database', 'TestDB')] # 7、往配置文件中增加章节section # 重新实例化一个对象,如果使用上面已经read的对象的话,write的时候会将已经读的内容再写一遍。
writeConfig = ConfigParser.ConfigParser() # 8、增加章节section
writeConfig.add_section("UserInfo") # 9、set 往配置文件中的[UserInfo]节点加入键值对 writeConfig.set("UserInfo",'username','TestYang') writeConfig.set("UserInfo",'password','TestYangPassWord') writeConfig.set("UserInfo",'age','') writeConfig.set("UserInfo",'country','China') # 10、已追加的方式打开已经存在的文件,如果文件不存在则创建该文件 # writeConfig.write(open('testconfig.ini','a')) # 上面的写入代码等价于下面的代码
'''
f = open('testconfig.ini','a')
writeConfig.write(f)
''' # 注意 如果 分开先写 writeConfig.add_section("UserInfo") 然后在单独执行set 会报如下错误
# 所以 add_section 和 set 要一起写,一起执行
'''
raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'UserInfo'
'''
# 写入后的结果如下
'''
[UserInfo]
username = TestYang
password = TestYangPassWord
age = 18
country = China
''' # 11、按照类型读取指定section 的option 信息 有getint 同样的还有getfloat、getboolean。 # 返回为string类型
print config.get("UserInfo",'age')
# 返回为int类型
print config.getint("UserInfo",'age') # 12、移除option config.remove_option('UserInfo','age') # 13、 移除section, 移除节点后,节点下的键值对一起移除
config.remove_section('UserInfo') # 只要有修改就要写回文件保存
config.write(open("testconfig.ini", "w")) # 其他格式的配置文件
# cf.write(open("test.conf", "w"))

执行后结果如下:

# 新建一个config 文件 testconfig.ini

[DATABASE]
host = 50.23.190.57
username : TestYang
password = TestYang
port = 3306
database = TestDB [UserInfo]
username = TestYang
password = TestYangPassWord
age = 18
country = China

应用实例如下:

# 应用实例,可以新建一个py文件,将使用的方法封装起来

class ReadConfig():
def __init__(self): self.cf = ConfigParser.ConfigParser()
self.cf.read(configFile) def get_UserInfo(self, username):
value = self.cf.get("UserInfo", username)
return value def get_http(self, name):
value = self.cf.get("HTTP", name)
return value def get_db(self, name):
value = self.cf.get("DATABASE", name)
return value if __name__ == "__main__":
getdata = ReadConfig()
print getdata.get_UserInfo("username") # TestYang
print getdata.get_db("database") # TestDB

使用过程遇到问题

1、configparser读取含有中文配置config.ini(Windows)显示乱码的解决方法

2、UnicodeDecodeError: 'gbk' codec can't decode bytes in position 243-244: illegal multibyte sequence

以上问题处理方法:在read 方法中加入参数  encoding="utf-8-sig" 即可,支持python3

        self.cf = configparser.ConfigParser()
# 处理配置文件中含中文字符的问题 ,UnicodeDecodeError: 'gbk' codec can't decode bytes in position 243-244: illegal multibyte sequence self.cf.read(configPath,encoding="utf-8-sig")

3、遇到的这个问题真是个坑,坑了我一天,最后终于通过对比打印内容输出,发现了问题的关键。

[EMAIL]
Smtp_Server1 = 'smtp.mxhichina.com'
Smtp_Server2 = smtp.mxhichina.com

其实configparser 读取配置文件的内容是原样输出的。

即读取 Smtp_Server1  读取的内容就是  'smtp.mxhichina.com', 而不是实际需要的 smtp.mxhichina.com

这里不像py文件中的 'smtp.mxhichina.com',py会将其处理为字符串,单作为参数时是 smtp.mxhichina.com

所以py文件可以这样写。

Smtp_Server = 'smtp.mxhichina.com'

4、关于smtplib发送测试报告遇到的问题。

发送邮件部分代码

tmp = smtp.sendmail(sender, receiver, msg.as_string())
#正常邮件参数值如下
Smtp_Sender = 'dev@we.cn'
Smtp_Sender_Password = ''
Smtp_Receiver = ['ywert@we.cn','qwer@we.cn']

并且configparser是原样读取的

所以我就这样写了

Pre_Receiver = ['qwer@we.cn']

结果会提示发送失败

{u"['wer@we.cn']": (500, 'Error: bad syntax')}
发送失败!

然后尝试着去掉列表符号以及引号尝试一下。

Test_Receiver = qwer@we.cn

结果提示发送成功,并实际收到了邮件

但是结果如图

这样的结果还是有问题的,考虑到receiver 本就应该是列表结构的,所以后面再做一下处理

receiver = []
receiver.append(self.TReceiver)

这样后邮件就显示正常了。

整理后代码如下

      receiver = []
receiver.append(self.TReceiver)
print receiver
# 定义发件人,如果不写,发件人为空
self.msg['From'] = self.sender
# 定义收件人,如果不写,收件人为空,后发现其实msg['To'] = “,”.join(receiver) 这里是必须序列化的参数,不过不这样就会出现上图的问题,而其下面的那条语句其实不处理也能发送出去。 self.msg['To'] = ",".join(receiver)
            self.smtp.sendmail(self.sender, receiver, self.msg.as_string())

但是还有一个问题,那就收件人有多个情况如何处理了。

# 比如
receiver = 123456@qq.com/1254367@qq.com

处理代码如下

self.receiver = []
for n in str(self.value).split("/"):
self.receiver.append(n)

“/” 是分隔符,可以根据 receiver  采用的分割而定。

Python - configParser模块学习的更多相关文章

  1. python中confIgparser模块学习

    python中configparser模块学习 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...

  2. python - argparse 模块学习

    python - argparse 模块学习 设置一个解析器 使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数.那么当你的程序运行时,该解析器就可以用于处理命令行参数. 解 ...

  3. python paramiko模块学习分享

    python paramiko模块学习分享 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Sola ...

  4. 【Python】模块学习之ConfigParser读写配置信息

    前言 使用配置文件可以在不修改程序的情况下,做到对程序功能的定制.Python 使用自带的configParser模块可以很方便的读写配置文件的信息. configParser 支持的方法 Confi ...

  5. python 之ConfigParser模块学习

    1.1 读取配置文件 -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以列表的形式返回 -options(section) 得到该secti ...

  6. Python常用模块学习

    1.模块介绍 2.time & datetime模块 3.random 4.os 5.sys 6.shutil 7.json&pickle 8.shelve 9.xml处理 10.ya ...

  7. Python logging 模块学习

    logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...

  8. Python Configparser模块读取、写入配置文件

    写代码中需要用到读取配置,最近在写python,记录一下. 如下,假设有这样的配置. [db] db_host=127.0.0.1 db_port=3306 db_user=root db_pass= ...

  9. python -ConfigParser模块讲解

    configParser 模块用于操作配置文件 注:Parser汉译为“解析”之意. 配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键= ...

随机推荐

  1. 谁有stanford ner训练语料

    [冒泡]良橙(1759086270) 12:14:17请教大家一个问题,我有1w多句用户的问题,但是有些包含了一些骂人,数字,特殊符号,甚至,语句不通,有什么方法可以过滤不[吐槽]爱发呆的小狮子(19 ...

  2. 一个新人对于DW标签的理解

    标签呢分为 一.一般标签 一般标签内又分为 ① 格式控制标签 格式控制标签的书写格式是: <font .....></font>  以font为开头以/font为结尾 font ...

  3. 使用Ajax生成的Excel文件并下載

    很久沒有寫文章啦,今天分享一個如何在ASP.NET MVC里使用Ajax下載生成文件的方法,以下只是個人心得: 大家都應該知道,在ASP.NET MVC里,如果通過Ajax調用后臺控制器時,可以返回一 ...

  4. linux常用命令:scp 命令

    scp(secure copy)用于进行远程文件拷贝. 1.命令格式: scp [参数] [源文件] [目标文件] 2.命令功能: scp在主机间复制文件,他使用 ssh(1)作为数据传输,而且用同样 ...

  5. JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念

    JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念 <html> <body> <script type="t ...

  6. pdf2swf 中文乱码问题

    准备资料: 1.xpdfbin-win-3.03.zip.xpdf-chinese-simplified.tar.gz 下载地址:http://www.foolabs.com/xpdf/downloa ...

  7. MHA集群(gtid复制)和vip漂移

    在上一片博客中,讲述了怎么去配置MHA架构!这片博客不再细说,只说明其中MySQL主从搭建,这里使用的是gtid加上半同步复制! 步骤与上一片博客一样,不同之处在于MySQL主从的搭建!详细的gtid ...

  8. python进程编程

    多进程multiprocess模块 multiprocessing is a package that supports spawning processes using an API similar ...

  9. 20145101《Java程序设计》第10周学习总结

    20145101<Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. 计算机网络 路由器和交换机组成了核心的 ...

  10. 20145109竺文君、20145106石晟荣 java实验三

    重构的概念:重构(Refactoring)就是通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性. 首先由zwj在<git.oschina.net& ...