❶ Python 快速检测配置文件是否变更
分享背景:
当项目非常多时随之而来的配置文件也会变得非常多,而且越发的复杂,有时候上线后才知道线上环境的配置文件不对,那么我们如何提前来检测到配置文件有改动了,本文将给你提供一个可以检测的手段。代码如下所示
1.导入包并指定目录
2.初始化配置文件的md5值并入库
3.检测新配置文件的md5值是否变化
4.文件进行md5加密处理
5.遍历指定目录下文件
6.代码运行入口
总结:
我们首先要确定我们要检测的配置文件,然后将它的当前的md5值进行初始化到数据库,当下次发布前我们可以针对性的进行一次检测,发现有变更就会提示出来,这样就可以做到提前知晓变更的配置文件,再人工介入进行重点检查。
❷ python3二进制文件读写直接加b不行吗
二进制模式,通常用来读取图片、视频等二进制文件。注意,它在读写的时候是以bytes类型读写的,因此获得的是一个bytes对象而不是字符串。在这个读写过程中,需要自己指定编码格式。在使用带b的模式时一定要注意传入的数据类型,确保为bytes类型。s = 'this is a test'b = bytes(s,encoding='utf-8')f = open('test.txt','w')f.write(s)##这样没问题,正常写入了文件。##————————————————-s = 'this is a test'b = bytes(s,encoding='utf-8')f = open('test.txt','wb') ##注意多了个bf.write(s)##报错TypeError: a bytes-like object is required, not 'str'##意思是它需要一个bytes类型数据,你却给了个字符串##—————————————————s = 'this is a test'b = bytes(s,encoding='utf-8')f = open('test.txt','wb') ##注意多了个bf.write(b) ##将变量b传给它,b是个bytes类型二、 + 模式:对于w+模式,在读写之前都会清空文件的内容,建议不要使用!对于a+模式,永远只能在文件的末尾写入,有局限性,建议不要使用!对于r+模式,也就是读写模式,配合seek()和tell()方法,可以实现更多操作。三、 编码问题要读取非UTF-8编码的文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:>>> f = open('gbk.txt', 'r', encoding='gbk')>>> f.read()'GBK'遇到有些编码不规范的文件,可能会抛出UnicodeDecodeError异常,这表示在文件中可能夹杂了一些非法编码的字符。遇到这种情况,可以提供errors参数,表示如果遇到编码错误后如何处理。>>> f = open('gbk.txt', 'r', encoding='gbk', errors='ignore')四、 文件对象操作每当我们用open方法打开一个文件时,将返回一个文件对象。这个对象内置了很多操作方法。下面假设,已经打开了一个f文件对象。1. f.read(size)读取一定大小的数据, 然后作为字符串或字节对象返回。size是一个可选的数字类型的参数,用于指定读取的数据量。当size被忽略了或者为负值,那么该文件的所有内容都将被读取并且返回。f = open("1.txt", "r")str = f.read()print(str)f.close()如果文件体积较大,请不要使用read()方法一次性读入内存,而是read(512)这种一点一点的读。2. f.readline()从文件中读取一行n内容。换行符为' '。如果返回一个空字符串,说明已经已经读取到最后一行。这种方法,通常是读一行,处理一行,并且不能回头,只能前进,读过的行不能再读了。f = open("1.txt", "r")str = f.readline()print(str)f.close()3. f.readlines()将文件中所有的行,一行一行全部读入一个列表内,按顺序一个一个作为列表的元素,并返回这个列表。readlines方法会一次性将文件全部读入内存,所以也存在一定的风险。但是它有个好处,每行都保存在列表里,可以随意存取。f = open("1.txt", "r")a = f.readlines()print(a)f.close()4. 遍历文件实际上,更多的时候,我们将文件对象作为一个迭代器来使用。# 打开一个文件f = open("1.txt", "r")for line in f: print(line, end='')# 关闭打开的文件f.close()这个方法很简单, 不需要将文件一次性读出,但是同样没有提供一个很好的控制,与readline方法一样只能前进,不能回退。几种不同的读取和遍历文件的方法比较:如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便。普通情况,使用for循环更好,速度更快。5. f.write()将字符串或bytes类型的数据写入文件内。write()动作可以多次重复进行,其实都是在内存中的操作,并不会立刻写回硬盘,直到执行close()方法后,才会将所有的写入操作反映到硬盘上。在这过程中,如果想将内存中的修改,立刻保存到硬盘上,可以使用f.flush()方法,但这可能造成数据的不一致。# 打开一个文件f = open("/tmp/foo.txt", "w")f.write("Python 是一种非常好的语言。我喜欢Python!!")# 关闭打开的文件f.close()6. f.tell()返回文件读写指针当前所处的位置,它是从文件开头开始算起的字节数。一定要注意了,是字节数,不是字符数。7. f.seek()如果要改变位置指针的位置, 可以使用f.seek(offset, from_what)方法。seek()经常和tell()方法配合使用。from_what的值,如果是0表示从文件开头计算,如果是1表示从文件读写指针的当前位置开始计算,2表示从文件的结尾开始计算,默认为0,例如:offset:表示偏移量。seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符seek(x,1) : 表示从当前位置往后移动x个字符seek(-x,2):表示从文件的结尾往前移动x个字符看一个例子:>>> f = open("d:\1.txt", "rb+")>>> f.write(b"1232312adsfalafds")17>>> f.tell()17>>> f.seek(5)5>>> f.read(1)b'1'>>> f.seek(-3, 2)14>>> f.read(1)b'f'8. f.close()关闭文件对象。当处理完一个文件后,调用f.close()来关闭文件并释放系统的资源。文件关闭后,如果尝试再次调用该文件对象,则会抛出异常。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了,或者更糟糕的结果。也就是说大象塞进冰箱后,一定不要忘记关上冰箱的门。
❸ python处理conf格式文件
通常配置文件的后缀是.conf,那我们应该怎么处理这类文件呢?现在我们用python语言来处理这类文件。 python2.x内置了ParserConfig模块用于处理文件,该模块在python3中有一点变化,基本上是一样的。 END
❹ python读取ini配置文件+Scala读取配置文件
注意路径问题 可将配置文件放在当前目录中 使用 ./config.ini 参考 https://blog.csdn.net/songlh1234/article/details/83316468
❺ 如何使用Python3读取配置文件
ini是微软Windows操作系统中的文件扩展名(也常用在其他系统)。INI是英文“初始化(Initial)”的缩写。正如该术语所表示的,INI文件被用来对操作系统或特定程序初始化或进行参数设置。通过它,可以将经常需要改变的参数保存起来(而且还可读),使程序更加的灵活。先给出一个ini文件的示例。1234567891011[School]ip = 10.15.40.123mask = 255.255.255.0gateway = 10.15.40.1dns = 211.82.96.1 [Match]ip = 172.17.29.120mask = 255.255.255.0gateway = 172.17.29.1dns = 0.0.0.0这个配置文件中保存的是不同场合下的IP设置参数。首先,Python读取ini配置需要用到ConfigParser包,所以要先加载它。1import configparser之后我们需要载入配置文件。1config=configparser.ConfigParser()#IpConfig.ini可以是一个不存在的文件,意味着准备新建配置文件。1config.read("IpConfig.ini")接下来,我们可以使用configparser.add_section()向配置文件中添加一个Section。#添加节School1config.add_section("School")注意:如果文件中已经存在相应的项目,则不能再增加同名的节。然后可以使用configparser.set()在节School中增加新的参数。#添加新的IP地址参数1234config.set("School","IP","192.168.1.120")config.set("School","Mask","255.255.255.0")config.set("School","Gateway","192.168.1.1")config.set("School","DNS","211.82.96.1")你可以以同样的方式增加其它几项。#由于ini文件中可能有同名项,所以做了异常处理12345678try: config.add_section("Match") config.set("Match","IP","172.17.29.120") config.set("Match","Mask","255.255.255.0") config.set("Match","Gateway","172.17.29.1") config.set("Match","DNS","0.0.0.0")except configparser.DuplicateSectionError: print("Section 'Match' already exists")增加完所有需要的项目后,要记得使用configparser.write()进行写入操作。1config.write(open("IpConfig.ini", "w"))以上就是写入配置文件的过程。接下来我们使用configparser.get()读取刚才写入配置文件中的参数。读取之前要记得读取ini文件。12345ip=config.get("School","IP")mask=config.get("School","mask")gateway=config.get("School","Gateway")dns=config.get("School","DNS")print((ip,mask+"\n"+gateway,dns)下面是一个完整的示例程序,它将生成一个IpConfig.ini的配置文件,再读取文件中的数据,输出到屏幕上。1# -*- coding: utf-8 -*-import configparser#读取配置文件config=configparser.ConfigParser()config.read("IpConfig.ini")#写入宿舍配置文件try: config.add_section("School") config.set("School","IP","10.15.40.123") config.set("School","Mask","255.255.255.0") config.set("School","Gateway","10.15.40.1") config.set("School","DNS","211.82.96.1")except configparser.DuplicateSectionError: print("Section 'School' already exists")#写入比赛配置文件try: config.add_section("Match") config.set("Match","IP","172.17.29.120") config.set("Match","Mask","255.255.255.0") config.set("Match","Gateway","172.17.29.1") config.set("Match","DNS","0.0.0.0")except configparser.DuplicateSectionError: print("Section 'Match' already exists")#写入配置文件config.write(open("IpConfig.ini", "w"))ip=config.get("School","IP")mask=config.get("School","mask")gateway=config.get("School","Gateway")dns=config.get("School","DNS")print((ip,mask+"\n"+gateway,dns))
❻ 如何用python来修改配置文件conf
楼上的俩人回答综合一下就是完美的答案,文件打开方式file.open。但是这种方式比较low,但是如果就是一简单的读写文件用着方便,configparser是专门的conf库,有一点点(只是一点点)学习成本,但是也很方便。推荐后者。
❼ 使用 Python 读写文件
有些数据是临时的,它们在应用程序运行时存储在内存中,然后丢弃。但是有些数据是持久的。它们存储在硬盘驱动器上供以后使用,而且它们通常是用户最关心的东西。对于程序员来说,编写代码读写文件是很常见的,但每种语言处理该任务的方式都不同。本文演示了如何使用 Python 处理文件数据。
在 Linux 上,你可能已经安装了 Python。如果没有,你可以通过发行版软件仓库安装它。例如,在 CentOS 或 RHEL 上:
在 macOS 上,你可以使用 MacPorts或Homebrew安装。在 Windows 上,你可以使用Chocolatey安装。
一旦安装了 Python,打开你最喜欢的文本编辑器,准备好写代码吧。
如果你需要向一个文件中写入数据,记住有三个步骤:
这与你在计算机上编码、编辑照片或执行其他操作时使用的步骤完全相同。首先,打开要编辑的文档,然后进行编辑,最后关闭文档。
在 Python 中,过程是这样的:
这个例子中,第一行以 写 模式打开了一个文件,然后用变量 f 表示,我使用了 f 是因为它在 Python 代码中很常见,使用其他任意有效变量名也能正常工作。
在打开文件时,有不同的模式:
第二行表示向文件中写入数据,本例写入的是纯文本,但你可以写入任意类型的数据。
最后一行关闭了文件。
对于快速的文件交互,常用有一种简短的方法可以写入数据。它不会使文件保持打开状态,所以你不必记得调用 close 函数。相反,它使用 with 语法:
如果你或你的用户需要通过应用程序需要向文件中写入一些数据,然后你需要使用它们,那么你就需要读取文件了。与写入类似,逻辑一样:
同样的,这个逻辑反映了你一开始使用计算机就已知的内容。阅读文档,你可以打开、阅读,然后关闭。在计算机术语中,“打开”文件意味着将其加载到内存中。
实际上,一个文本文件内容肯定不止一行。例如,你需要读取一个配置文件、 游戏 存档或乐队下一首歌曲的歌词,正如你打开一本实体书时,你不可能立刻读完整本书,代码也只能解析已经加载到内存中的文件。因此,你可能需要遍历文件的内容。
示例的第一行指明使用 读 模式打开一个文件,然后文件交由变量 f 表示,但就像你写数据一样,变量名是任意的。 f 并没有什么特殊的,它只是单词 “file” 的最简表示,所以 Python 程序员会经常使用它。
在第二行,我们使用了 line ,另一个任意变量名,用来表示 f 的每一行。这告诉 Python 逐行迭代文件的内容,并将每一行的内容打印到输出中(在本例中为终端或IDLE)。
就像写入一样,使用 with 语法是一种更简短的方法读取数据。即不需要调用 close 方法,方便地快速交互。
使用 Python 有很多方法向文件写入数据,包括用 JSON、YAML、TOML等不同的格式写入。还有一个非常好的内置方法用于创建和维护SQLite数据库,以及许多库来处理不同的文件格式,包括图像、音频和视频等。
via: https://opensource.com/article/21/7/read-write-files-python
作者:Seth Kenlon选题:lujun9972译者:MjSeven校对:turbokernel
❽ 如何使用python程序向ini配置文件中写入中文
和普通的读写文件一样的,首先得要有权限,然后重要的是文件编码格式要选对且要统一,不然就乱码了
❾ 如何使用Python3读写INI配置文件
ini文件简介ini是我们常见到的配置文件格式之一。ini是微软Windows操作系统中的文件扩展名(也常用在其他系统)。INI是英文“初始化(Initial)”的缩写。正如该术语所表示的,INI文件被用来对操作系统或特定程序初始化或进行参数设置。网络通过它,可以将经常需要改变的参数保存起来(而且还可读),使程序更加的灵活。我先给出一个ini文件的示例。[School]ip = 10.15.40.123mask = 255.255.255.0gateway = 10.15.40.1dns = 211.82.96.1[Match]ip = 172.17.29.120mask = 255.255.255.0gateway = 172.17.29.1dns = 0.0.0.0这个配置文件中保存的是不同场合下的IP设置参数。下面将以生成和读取这个配置文件为例,进行讲解。Python(v3)读取方法首先,Python读取ini配置需要用到ConfigParser包,所以要先加载它。import configparser之后我们需要载入配置文件。config=configparser.ConfigParser()#IpConfig.ini可以是一个不存在的文件,意味着准备新建配置文件。config.read("IpConfig.ini")接下来,我们可以使用configparser.add_section()向配置文件中添加一个Section。#添加节Schoolconfig.add_section("School")注意:如果文件中已经存在相应的项目,则不能再增加同名的节。然后可以使用configparser.set()在节School中增加新的参数。#添加新的IP地址参数config.set("School","IP","192.168.1.120")config.set("School","Mask","255.255.255.0")config.set("School","Gateway","192.168.1.1")config.set("School","DNS","211.82.96.1")你可以以同样的方式增加其它几项。#由于ini文件中可能有同名项,所以做了异常处理try:config.add_section("Match")config.set("Match","IP","172.17.29.120")config.set("Match","Mask","255.255.255.0")config.set("Match","Gateway","172.17.29.1")config.set("Match","DNS","0.0.0.0")except configparser.DuplicateSectionError:print("Section 'Match' already exists")增加完所有需要的项目后,要记得使用configparser.write()进行写入操作。config.write(open("IpConfig.ini", "w"))以上就是写入配置文件的过程。接下来我们使用configparser.get()读取刚才写入配置文件中的参数。读取之前要记得读取ini文件。ip=config.get("School","IP")mask=config.get("School","mask")gateway=config.get("School","Gateway")dns=config.get("School","DNS")print((ip,mask+"\n"+gateway,dns))完整示例下面是一个完整的示例程序,他将生成一个IpConfig.ini的配置文件,再读取文件中的数据,输出到屏幕上。# -*- coding: utf-8 -*-import configparser#读取配置文件config=configparser.ConfigParser()config.read("IpConfig.ini")#写入宿舍配置文件try:config.add_section("School")config.set("School","IP","10.15.40.123")config.set("School","Mask","255.255.255.0")config.set("School","Gateway","10.15.40.1")config.set("School","DNS","211.82.96.1")except configparser.DuplicateSectionError:print("Section 'School' already exists")#写入比赛配置文件try:config.add_section("Match")config.set("Match","IP","172.17.29.120")config.set("Match","Mask","255.255.255.0")config.set("Match","Gateway","172.17.29.1")config.set("Match","DNS","0.0.0.0")except configparser.DuplicateSectionError:print("Section 'Match' already exists")#写入配置文件config.write(open("IpConfig.ini", "w"))ip=config.get("School","IP")mask=config.get("School","mask")gateway=config.get("School","Gateway")dns=config.get("School","DNS")print((ip,mask+"\n"+gateway,dns))总结Python读取ini文件还是十分简单的,这里我给出的只是一些简单的使用方法,如果想用更高级的功能,比如和注释有关的功能。可以参考Pyhton官方文档
❿ python3 怎么读取mysql配置文件
记录一个读取my.cnf配置的脚本,可以基于该函数做一些mysql 后端运维工作。各位可以基于自己的需求进行修改。脚本名称getcnf.py
importsys
importos
defread_cnf(cnf_path):
assertcnf_pathisnotNoneandos.path.exists(cnf_path)
cnf_dict={}
cur_section=None
with open(cnf_path)as cnf_reader:
forlineincnf_reader.readlines():
line=''.join(line.split())
iflen(line)<=0or'#'==line[0]:
continue
if'['==line[0]and']'==line[-1]:
cur_section=line[len('['):len(line)-1]
ifcur_sectionnotincnf_dict:
cnf_dict[cur_section]={}
elif'='inlineandline.count('=')==1:
ifcur_sectionisNone:
LOGGER.warning('cur_section is None')
continue
tokens=line.split('=')
key=tokens[0].replace('"','').replace("'",'')
value=tokens[1].replace('"','').replace("'","")
cnf_dict[cur_section][key]=value
returncnf_dict
defmain():
cnf_path="/u01/my3353/my.cnf"
mycnf=read_cnf(cnf_path)
printmycnf['mysqld']['tmpdir']
if__name__=='__main__':
main()
运行效果图