你的Python 程序那么多设置项,为何不制作一个配置文件!


前言

相信大家平时在写一些Python 自动化程序的时候都会遇到这样一个问题:

为了让自己的程序尽可能拥有较高的自定义程度,而在程序当中,需要对很多的设置项进行一一配置,这真的是在是太麻烦的!

既然如此,为什么我们不制作一个配置文件呢?例如一个txt 文档?
这样我们就可以把需要配置的信息一一写入文件,然后执行程序的时候,自动前往该配置文件中读取用户的配置。

写在文档中的配置信息不仅直观,容易修改,最重要的是方便保存!!!

我最近闲着无聊,就在写一个关于自动生成词云的小软件。其中需要很多自定义配置,所以我就打算用txt 文档来存储配置信息,故接下来我就会以我的这个小项目作为例子进行讲述。
在这里插入图片描述

开始

一、找到你的配置文件

没错,当你新建了一个txt 文档后,面临的首个问题就是:如何让你的程序找到这个文档?

经过我之前的无数次尝试之后,我找到了办法:
《Python >>> 获取当前py文件的绝对路径》

os.path.dirname(os.path.abspath(__file__))

当我们通过上述命令获取到当前Python 文件的绝对路径之后,若我们的txt 文档和Python 文件在同一文件夹下,那我们就可以很容易地找到它:
(例如我的配置文件是配置.txt

Config_PATH = os.path.dirname(os.path.abspath(__file__)) + "\\配置.txt"

在这里插入图片描述

二、读取配置文件的内容

找到了这个文件干嘛呢?当然是读它啊哈哈

我的这个txt 文件中存储的配置信息大概是这样的:
在这里插入图片描述
可以看到,确实挺多需要一一配置的。

1. 读取文件内容

根据我之前这篇博文《Python 逐行读取txt 文件并生成列表》可知,我们可以使用open() 打开文件并通过read() 读取该文件流的数据,其所返回的数据是str 类型,并且和txt 文件中的形式一致。

Config_f = open(Config_PATH, "r",encoding='utf-8')
Config_data = Config_f.read() # 读取完整数据
Config_f.close()
print(Config_data)

输出结果:
(和上述txt 文档中信息一致)
在这里插入图片描述

2. 提取关键数据

txt 文件中的数据并不是所有都是有效信息,例如序号和一些说明性文字就不是我们程序需要知道的,程序只需要知道每个等号左右两边的对应关系,并且将其转换成程序中的对应变量关系即可。

所以如何提取关键数据,在我这个例子中,直接用字符串匹配即可:

start=Config_data.find("主标题") # 从字符串中找到"主标题"并将指针移动到该子字符串起始处
string = Config_data[start+len("主标题")+1:Config_data.find("\n", start)] # 从该子字符串后面开始切片,直到遇到换行符
print(string)

这段程序的作用就是从字符串中找到"主标题"并将指针移动到该子字符串起始处,然后从该子字符串后+1位置处开始切片,直到遇到换行符。
(也就是找到"主标题",然后将"主标题"后面"="后的字符串取出)
输出结果:
在这里插入图片描述
为了一次性存储所有的配置信息,我将上面程序修改一下,用一个字典来存储,这样方便后续载入配置信息:

Vari_dict = {"主标题":"", "副标题":"", "左边间隔":"", "上边间隔":"",\
             "右边间隔":"", "下边间隔":"", "四周间隔":"", "主副标题间隔":"",\
             "词云图轮廓":"","单词字体大小范围":"", "主标题字体大小":"", "副标题字体大小":"",\
             "旋转单词角度":"", "距离左边的距离":"", "距离上边的距离":"",\
             "距离右边的距离":"", "距离下边的距离":"", "词云图的宽度":"", \
             "词云图的高度":"", "是否允许词云图的数据展示在画布范围之外":""}
for i in Vari_dict.keys():
    start=Config_data.find(i)
    Vari_dict[i] = Config_data[start+len(i)+1:Config_data.find("\n", start)]
print(Vari_dict)

输出结果:
在这里插入图片描述
完美将配置信息都存进了一个对应的字典里面!
在这里插入图片描述

三、载入配置信息

上一步中,我们成功将txt 文档中的配置信息一一存进了一个字典里,那么接下来要做的就是将字典中的配置信息载入程序的各个设置当中。

1. 注意一个问题

首先,有一点需要说明一下:

我们通过字符串切片传入并存在字典的键值对中的“值”(也就是配置信息)都是字符串形式的。

有的设置项接收字符串形式参数,例如名字,标题等;而有的设置项只能接收整型类型的参数,例如大小、速度、间隔距离等。

所以当给一些本就接收字符串类型参数的设置项输入参数时,我们直接输入字典的“值”即可,没有什么不妥,但是当遇上接收其他类型参数的设置项时,我们需要对这个字符串类型的“值”进行一点处理

2. eval 登场

为了解决上述问题,我们可以使用eval() 函数,先看看菜鸟教程对该函数的介绍:
在这里插入图片描述
简单来说就是,eval() 函数可以将括号中的字符串当作表达式来处理:

  1. 若括号中的字符串是运算表达式,那么该函数返回运算结果;
  2. 若是数字字符串,那么返回数字;
  3. 若是元组或其他形式的字符串,那么返回元组或其他形式。

应该挺容易理解吧,所以对于那些接收非字符串类型参数的设置项时,我们只需要加入一个eval() 函数进行类型转换即可:
在这里插入图片描述
如上所示,对于接收字符串类型参数的设置项时(主标题、副标题),我就直接将字典的“值”传入;
而对于接收整型类型参数的设置项时(左、右间隔),我就将字符串转化为整型再传入。
在这里插入图片描述

结束

回头看,崎岖坎坷;向前看,永不言弃!

谢谢观看!

猜你喜欢

转载自blog.csdn.net/weixin_40973138/article/details/106241105