代码技巧:处理单一文件或者一个列表中的文件及ini配置文件读取

本文介绍了将单一文件处理为列表的编程技巧,并详细讲解了如何使用Python的configparse模块读取和操作ini配置文件,包括常规读取、字典方式访问以及写入磁盘的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


写代码技巧,单一文件都转化为列表处理

其中有一个非常好的技巧就是当用户传入单一文件,就将这个文件放入一个列表中,若用户传入一个可迭代对象,直接进行跌倒

def read(self,filenames,encoding=None):
    if isinstance(filenames,str):
        filenames = [filenames] #若是字符串直接放入list,后续跌倒
    read_ok = []
    for filenmae in filenames: #若本身传入list,直接进行跌倒
        try:
            with open(filename,encoding=encoding) as fp:
                self._read(fp,filename)
        except OSError:
            continue
        read_ok.append(filename)
    return read_ok

ini配置文件读取

配置文件名称config.ini内容如下:

[DEFAULT]
a = test

[mysqld]
tickTime=5000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/log
clientPort=2181
maxClientCnxns=120
autopurge.snapRetainCount=1000
autopurge.purgeInterval=1
server.69=10.103.101.168:2888:3888
server.70=10.103.101.96:2888:3888

cfg实例的内容值本身就是一个字典,因此可以按照字典的形式进行对其访问

采用常规读取配置文件

import configparaser
filename = 'config.ini'
cfg = configparser.ConfigParser()
cfg.read(filename)
sections = cfg.sections()  #section为【mysqld】类似此内容
for sect in sections:
    options = cfg.options(sect)
    for option in options:  #option类似port=3306 中的port
        val = cfg.get(sect,option)
        print(val)
运行结果:
5000
10
5
/data/zookeeper/data
/data/zookeeper/log
2181
120
1000
1
10.103.101.168:2888:3888
10.103.101.96:2888:3888
test

字典方式访问读取ini配置文件

import configparser

filename = 'config.ini'
cfg = configparser.ConfigParser()
cfg.read(filename)
sections = cfg.sections()
for sect in sections:
    for item in cfg.items(sect):
        k,v = item
        print(k,v)
运行结果:
a test
ticktime 5000
initlimit 10
synclimit 5
datadir /data/zookeeper/data
datalogdir /data/zookeeper/log
clientport 2181
maxclientcnxns 120
autopurge.snapretaincount 1000
autopurge.purgeinterval 1
server.69 10.103.101.168:2888:3888
server.70 10.103.101.96:2888:3888

完全当字典使用

本质上和json格式并无区别,section就是字典中的key,option就是value,而option本身又是字典,所以可以直接按照字典形式进行访问

import configparser

filename = 'config.ini'
cfg = configparser.ConfigParser()
cfg.read(filename)
print(cfg['mysqld']['tickTime'])
for k,v in cfg['mysqld'].items():
    print(k,v)
运行结果:
5000
ticktime 5000
initlimit 10
synclimit 5
datadir /data/zookeeper/data
datalogdir /data/zookeeper/log
clientport 2181
maxclientcnxns 120
autopurge.snapretaincount 1000
autopurge.purgeinterval 1
server.69 10.103.101.168:2888:3888
server.70 10.103.101.96:2888:3888
a test

configparse的写入磁盘方法

如mysql.ini是配置模板,根据配置模板通过configparse的添加section及option等方法在内存中操作后,保存写入磁盘文件

import configparser

filename = 'config.ini'
cfg = configparser.ConfigParser()
cfg.read(filename)
cfg.set('mysqld','port','3306')
with open('cfg.ini','wt') as f:
    cfg.write(f)      #写入磁盘的方法
运行结果:#增加一个配置文件,打开配置文件可知如下操作
[DEFAULT]
a = test

[mysqld]
ticktime = 5000
initlimit = 10
synclimit = 5
datadir = /data/zookeeper/data
datalogdir = /data/zookeeper/log
clientport = 2181
maxclientcnxns = 120
autopurge.snapretaincount = 1000
autopurge.purgeinterval = 1
server.69 = 10.103.101.168:2888:3888
server.70 = 10.103.101.96:2888:3888
port = 3306
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值