python的ConfigParser函数和查找文件的方法(listdir,fnmatc,glod)
2021-02-05 18:14
标签:名称 增删改 lang 修改 就会 structure 获取 官方 cas 使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是configParser configParser解析的配置文件的格式比较象ini的配置文件格式,就是文件中由多个section构成,每个section下又有多个配置项 ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容。 该模块的作用 就是使用模块中的 注意:configparser有default_section的概念,默认为 实现查询、添加、删除、保存。 ini配置文件的格式: 同时需要注意 可在PyCharm上查看测试效果。 fnmatch这个库相对比较简单,只有4个函数,分别是fnmatch、fnmatchcase、filter和translate,其中最常用的是fnmatch。主要功能如下: fnmatch和fnmatchcase用法相同,判断名称是否符合表达式,返回True or False 标准库glob的作用相当于os.listdir()加上fnmatch。使用glob以后,不需要调用os.listdir获取文件列表,直接通过模式匹配即可。如下所示: glob和iglob的区别在于glob返回的是一个列表,iglob返回的是一个生成器对象 PS:glob同样支持通配符和fnmatch相同,这里不在列举,并且在通配符表达式中支持路径 总结:虽然glob模块可以很轻松地匹配特定文件和文件夹,但是仅仅支持少量的通配符,没办法像正则表达式一样匹配更复杂的字符串。使用的时候应当认真考虑使用场景,根据需求针对性地选择解决方案。 python的ConfigParser函数和查找文件的方法(listdir,fnmatc,glod) 标签:名称 增删改 lang 修改 就会 structure 获取 官方 cas 原文地址:https://blog.51cto.com/14320361/2490627ConfigParser简介
ConfigParser
模块在python3中修改为configparser
.这个模块定义了一个ConfigParser类,该类的作用是使用配置文件生效,配置文件的格式和windows的INI文件的格式相同RawConfigParser()
、ConfigParser()
、 SafeConfigParser()
这三个方法(三者择其一),创建一个对象使用对象的方法对指定的配置文件做增删改查 操作。ini文件结构
ini文件结构需要注意一下几点:
=
或者:
进行分隔section
的名字是区分大小写的,而key
的名字是不区分大小写的#
或者;
为前缀[DEFAULT]
节,也就是之后的所有的section都有该默认section中的键值对,详情参见configparser源码的__init__()
方法一、使用ConfigParser类解析ini配置文件
(PyCharm中实现)
练习目的:
使用ConfigParser类解析配置文件
节: [session]
参数(键=值) name=value
1、解析mysql配置文件
**read(filename)
直接读取文件内容**get(section, option)
获取section
下具体某一配置项的值(返回的是字符串)sections()
得到所有的section,并以列表的形式返回options(section)
得到该section的所有optionitems(section)
键值对的形式 得到该section的所有optiongetint(section,option)
、cnf.getboolean(section,option)
、getfloat(section,option)
获取整型、布尔型和浮点型的option
的值my.ini文件示例:
[client]
port = 3306
user = mysql
password = mysql
host = 127.0.0.1
[mysqld]
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-external-locking
2、ConfigParser类的使用方法
(1)创建configParser对象
In [1]: import configparser
In [2]: cf = configparser.ConfigParser(allow_no_value=True)
(2)读取配置文件内容
In [4]: cf.read(‘my.ini‘)
Out[4]: [‘my.ini‘]
(3)获取配置文件信息
getboolean()
方法能判断True/False的值有: ‘yes’/‘no’, ‘on’/‘off’, ‘true’/‘false’ 和 ‘1’/‘0’In [4]: cf.sections() # 返回一个包含所有章节的列表
Out[4]: [‘client‘,‘mysq1d‘]
In [5]: cf.has_section(‘client‘) # 判断章节是否存在
0ut[5]: True
In [6]cf.options(‘client ‘) # 判断某个选项是否存在
Out[6]: [‘port", ‘user‘, ‘password‘, ‘host‘ ]
In [7]: cf.has_option(‘client‘, ‘user‘) # 判断某个选项是否存在
0ut[7]: True
In [8]: cf.get(‘client‘,‘ port‘) # 获取选项的值
0ut[8]: ‘3306‘
In [9]: cf.getint(‘client‘,‘port‘) # 获取选项的值
0ut[9]: 3306
(4)修改配置文件
常用方法:
方法测试:
In [11]: cf.remove_section(‘client‘) # 删除一个章节
Out[11]: True
In [14]: cf.write(open(‘my.ini‘,‘w‘)) # 将ConfigParser兑现中的数据保存到文件中
#可在PyCharm中my.ini文件查看是否少了‘client‘字段。
In [15]: cf.add.section(‘client‘) # 添加一个章节
In [16]: cf.set(‘client‘,‘port‘,‘3306‘) # 添加一个选项
In [17]: cf.set(‘client‘,‘user‘,‘mysq1‘) # 添加一个选项
In [18]: cf.set(‘client‘,‘password‘ ‘mysq1‘) # 添加一个选项
In [19]: cf.set(‘client‘,‘host‘,‘127.0.0.1‘) # 添加一个选项
In [20]: cf.write(open(‘my.ini‘,‘w‘)) # 将ConfigParser兑现中的数据保存到文件中
#可在PyCharm中my.ini文件查看是否增加了‘client‘字段。
In [21]: cf.remove_option(‘client‘, ‘host‘) # 删除一个选项**
Out[21]: True
In [22]: cf.write(open(‘my.ini‘,‘w‘ )) # 将ConfigParser兑现中的数据保存到文件中
#可在PyCharm中my.ini文件查看是否减少了指定选项。
3、常见异常
异常
描述
ConfigParser.Error
所有异常的基类
ConfigParser.NoSectionError
指定的section没有找到
ConfigParser.DuplicateSectionError
调用add_section() 时,section名称已经被使用
ConfigParser.NoOptionError
指定的参数没有找到
ConfigParser.InterpolationError
当执行字符串插值时出现问题时,出现异常的基类
ConfigParser.InterpolationDepthError
当字符串插值无法完成时,因为迭代次数超过了最大的范围,所以无法完成。InterpolationError的子类
InterpolationMissingOptionError
当引用的选项不存在时,会出现异常。InterpolationError的子类
ConfigParser.InterpolationSyntaxError
当产生替换的源文本不符合所需的语法时,就会出现异常。InterpolationError的子类。
ConfigParser.MissingSectionHeaderError
当试图解析一个没有分段标题的文件时,会出现异常。
ConfigParser.ParsingError
当试图解析文件时发生错误时,会出现异常
ConfigParser.MAX_INTERPOLATION_DEPTH
当raw参数为false时,get()的递归插值的最大深度。这只适用于ConfigParser类
二、查找文件
PyCharm创建测试文件,格式如下:
G:\四期\python\ConfigParser\files>tree /f
卷 学习 的文件夹 PATH 列表
卷序列号为 7C11-994A
G:.
│ a.jpg
│ A.png
│ b.jpg
│ c.png
│ e.bmp
│ f.txt
│ ff.txt
│ find_file.py
│ find_file2.py
│ find_file3.py
│
└─test
测试一下
find_file.py
import os
for item in os.listdir(‘.‘):
if os.path.isfile(item):
print(item)
输出结果如下:
a.jpg
A.png
b.jpg
c.png
e.bmp
f.txt
ff.txt
find_file.py
find_file2.py
find_file3.py
1、使用fnmatch找到特定文件
fnmatch支持的通配符
字符
函数
*
匹配所有字符
?
匹配单个字符
[seq]
匹配指定范围内的字符
[!seq]
匹配不在指定范围内的字符
fnmatch的基本使用
(1)fnmatch.fnmatch():一次只能处理一个文件
find_file2.py
import os
import fnmatch
for item in os.listdir(‘.‘):
if os.path.isfile(item):
# if fnmatch.fnmatch(item,‘*.jpg‘):
# if fnmatch.fnmatch(item, ‘[a-e].*‘):
# if fnmatch.fnmatch(item, ‘[a-z]?.txt‘):
# if fnmatch.fnmatch(item, ‘[!a-c]*‘):
print(item)
输出结果如下:
#输出以“.jpg”为结尾的文件
a.jpg
b.jpg
#输出以“a-e”为标题的文件
a.jpg
A.png
b.jpg
c.png
e.bmp
#输出以“a-z”和一个任意字符为标题,并且以“.txt”为后缀的文件
ff.txt
#输出除了以“a-c”为开通的文件
e.bmp
f.txt
ff.txt
find_file.py
find_file2.py
find_file3.py
(2)fnmath.filter():一次可以处理多个文件
find_file3.py
import os
import fnmatch
items = os.listdir(‘.‘)
files = fnmatch.filter(items, ‘[a-c]*‘)
print(files)
输出结果如下:
[‘a.jpg‘, ‘A.png‘, ‘b.jpg‘, ‘c.png‘]
2、使用glob找到特定文件
glob模块支持的通配符:
通配符
功能
*
匹配0或多个字符
**
匹配所有文件、目录、子目录和子目录里的文件(3.5版本新增)
?
匹配1个字符,与正则表达式里的?不同
[exp]
匹配指定范围内的字符,如:[1-9]匹配1至9范围内的字符
[!exp]
匹配不在指定范围内的字符
import glob
file = glob.glob(‘*.txt‘)
print(file)
输出结果如下:
[‘f.txt‘, ‘ff.txt‘]
glob基本使用
>>> import glob
>>> glob.glob(‘*.txt‘)
[‘a1.txt‘, ‘a2.txt‘, ‘aA.txt‘]
>>> g = glob.iglob(‘*.txt‘) # 使用iglob返回的是一个生成器
>>> g
>>> glob.glob(‘/Users/DahlHin/github/test/*.txt‘)
[‘/Users/DahlHin/github/test/a1.txt‘,‘/Users/DahlHin/github/test/a2.txt‘,‘/Users/DahlHin/github/test/aA.txt‘]
文章标题:python的ConfigParser函数和查找文件的方法(listdir,fnmatc,glod)
文章链接:http://soscw.com/index.php/essay/51437.html