python配置文件操作的例子

写在前面,公众号的留言功能开通有一段时间了,如果需要交流请尽量选择留言的方式,因为平时我也要working,所以后台消息有时会无法及时回复,望理解,正文如下。

在我们写一个功能性的python脚本时,有时需要读取一个配置文件,这个配置文件可以给用户自定义修改,以实现脚本的最大灵活性,谈到配置文件的修改,这对我们运维人员来说应该都不陌生,因为运维的工作估计很大部分是内容就是通过修改配置文件来完成的,如果产品的任意改动变化都要修改改代码,可想而知那样效率会多么低下,例如游戏中开个1.5倍经验,不好意思回去改代码再发布,折腾几回都得崩溃,那回到我们的运维工作,我们日常写的维护脚本一般涉及不到特别复杂的配置文件读取,但这种读取配置的方式我认为是必须要学会的,所以今天我们就来学习下如何用 python实现读取配置文件,python要读取配置文件这里要用到ConfigParser模块,我们先来看看它的基础用法:

常用方法:

read(filename):读取一个配置文件

sections():获取配置文件中的section

options(section):获取该section的所有option

items(section) :获取该section的所有键值对

get(section,option) :获取section中option的值

以上方法使用不太理解没关系,通过例子就很直观明白了,假如我这里已经有一个配置文件cfg.ini,内容如下:

[server]
address = 192.168.1.1
port = 2280

[user]
user = cat
password = Test

[upload]
back_target = e:\\webadmin\\web\\flaskr

[winrar_path]
rar_path = C:\\"Program Files"\\WinRAR\\

现在我们打开python交互命令行,输入命令如下:

>>> import ConfigParser
>>> cf=ConfigParser.ConfigParser()
>>> cf.read('cfg.ini')
['cfg.ini']
>>> cf.sections()
['server', 'user', 'upload', 'winrar_path']
>>> cf.options('server')
['address', 'port']
>>> cf.get('server','address')
'192.168.1.1'
>>> cf.items('server')
[('address', '192.168.1.1'), ('port', '2280')]

对照配置文件内容,再看下运行结果就很容易理解上面的方法都会返回什么结果,这个模块常用的操作就介绍到这里,往下我给一个实际生产环境中的例子,因为运维是个操作性很强的工作,知识说到底还是要会用,没有实际代码的功能介绍是苍白的,因为我们每天面对的需求不仅要知,更重要的是要会做,以下这个脚本是之前写的了,今天翻出来给大家做个学习参考,代码如下:
#encoding=utf-8

import os.path
import ConfigParser
from ftplib import FTP_TLS
from threading import Thread
import socket
import ssl

cf = ConfigParser.ConfigParser()
cf.read(r'e:\project1\ftplist.txt')

user = 'check_lg'
password = 'test'
server_info = []

#定义FTP_TLS类
class IMPLICIT_FTP_TLS(FTP_TLS):
    def __init__(self, host='', user='', passwd='', acct='', keyfile=None,
        certfile=None, timeout=60):
        FTP_TLS.__init__(self, host, user, passwd, acct, keyfile, certfile, timeout)

    def connect(self, host='', port=0, timeout=-1):
        if host != '':
            self.host = host
        if port > 0:
            self.port = port
        if timeout != -1:
            self.timeout = timeout
        try:
            self.sock = socket.create_connection((self.host, self.port), self.timeout)
            #self.af = self.sock.family
            self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile)
            self.file = self.sock.makefile('rb')
            self.welcome = self.file.readline()
        except Exception as e:
            print e
        return self.welcome

#获得配置文件信息,转换成列表
def get_ip_port():
    for arg in cf.sections():
        ip, port = cf.options(arg)
        ip = cf.get(arg, ip)
        port = cf.get(arg, port)
        info = (ip, port)
        server_info.append(info)
    return server_info

#检查函数,测试是否ftp登录ok
def check_login(ftp_server, ftp_port):
    try:
        ftps = IMPLICIT_FTP_TLS()
        #print help(ftps)
        ftps.connect(host=ftp_server, port=ftp_port)
        ftps.login(user=user, passwd=password)
        ftps.quit()
        return 1
    except:
        return 0

#根据检查的成功或失败,写入文件
def write_status(ftp_server, ftp_port):
    result = check_login(ftp_server, ftp_port)
    f = open(r'e:\project1\status.txt', 'a+')
    if result == 1:
        f.write(ftp_server + ' login ok' + '\n')
    else:
        f.write(ftp_server + ' login error' + '\n')
    f.close()

#主函数,判断文件大小是否为0,非0重置文件,保持文件内容最新,多线程检查。
if __name__ == '__main__':
    threads = []
    server_info = get_ip_port()
    if os.path.getsize(r'e:\project1\status.txt'):
        f = open(r'e:\project1\status.txt', 'r+')
        f.truncate()
        f.close()
    for i in range(0, len(cf.sections())):
        ip, port = server_info[i]
        threads.append(Thread(target=write_status, args=(ip, port)))
    for thread in threads:
        thread.start()
    for thread in threads:
        thread.join()
脚本之前文章解释过,今天就不多解释了,其实大家看注释也能明白,另外请注意这个脚本是运行在windows系统下的,今天关于python读取配置文件的介绍就到这里,这个模块不但可以读取配置文件,还可以修改、保存配置文件,所以想深入学习的可以去官网看资料

时间: 2024-10-14 17:53:12

python配置文件操作的例子的相关文章

在Python中操作字典之clear()方法的使用

  这篇文章主要介绍了在Python中操作字典之clear()方法的使用,是Python入门的基础知识,需要的朋友可以参考下 clear()方法将删除字典中的所有项目(清空字典) 语法 以下是clear()方法的语法: ? 1 dict.clear() 参数 NA 返回值 此方法不返回任何值. 例子 下面的例子显示了clear()方法的使用 ? 1 2 3 4 5 6 7 #!/usr/bin/python   dict = {'Name': 'Zara', 'Age': 7};   print

在Python中操作字典之fromkeys()方法的使用

  这篇文章主要介绍了在Python中操作字典之fromkeys()方法的使用,是Python入门的基础知识,需要的朋友可以参考下 fromkeys()方法从序列键和值设置为value来创建一个新的字典. 语法 以下是fromkeys()方法的语法: ? 1 dict.fromkeys(seq[, value])) 参数 seq -- 这是将用于字典的键准备的值的列表. value -- 这是可选的,如果提供的话则值将被设置为这个值 返回值 此方法返回列表. 例子 下面的例子显示fromkeys

在Python中操作字典之setdefault()方法的使用

  这篇文章主要介绍了在Python中操作字典之setdefault()方法的使用,是Python入门学习中的基础知识,需要的朋友可以参考下 setdefault()方法类似于get()方法,但会设置字典[键]=默认情况下,如果键不是已经在字典中. 方法 以下是setdefault()方法的语法: ? 1 dict.setdefault(key, default=None) 参数 key -- 这是要被搜索的键 default -- 这是没有找到键的情况下返回的值. 返回值 此方法返回字典可用的

Python中操作列表之List.append()方法的使用

  这篇文章主要介绍了在Python中操作列表之List.append()方法的使用,是Python入门学习中的基础知识,需要的朋友可以参考下 append()方法追加传递obj到现有的列表. 语法 以下是append()方法的语法: ? 1 list.append(obj) 参数 obj -- 这是在列表中要追加的对象. 返回值 此方法不返回任何值,但更新现有的列表. 例子 下面的例子显示了append()方法的使用. ? 1 2 3 4 5 #!/usr/bin/python   aList

在Python中操作列表之list.extend()方法的使用

  这篇文章主要介绍了在Python中操作列表之list.extend()方法的使用,是Python入门学习中的基础知识,需要的朋友可以参考下 extend()方法追加序列内容到列表. 语法 以下是extend()方法的语法: ? 1 list.extend(seq) 参数 seq -- 这是列表的元素 返回值 此方法不返回任何值,但添加内容到现有列表中 例子 下面的例子显示了extend()方法的使用 ? 1 2 3 4 5 6 7 #!/usr/bin/python   aList = [1

在Python中操作列表之List.pop()方法的使用

  这篇文章主要介绍了在Python中操作列表之List.pop()方法的使用,是Python入门中的基础知识,尤其该方法的返回值在Python编程中经常被灵活运用,需要的朋友可以参考下 pop()方法从列表移除并返回最后一个对象或obj. 语法 以下是pop()方法的语法: ? 1 list.pop(obj=list[-1]) 参数 obj -- 这是一个可选参数,该对象的索引可以从该列表中删除 返回值 此方法返回从列表中移除对象 例子 下面的例子显示了pop()方法的使用 ? 1 2 3 4

在Python中操作文件之truncate()方法的使用教程

  这篇文章主要介绍了在Python中操作文件之truncate()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 truncate()方法截断该文件的大小.如果可选的尺寸参数存在,该文件被截断(最多)的大小. 大小默认为当前位置.当前文件位置不改变.注意,如果一个指定的大小超过了文件的当前大小,其结果是依赖于平台. 注意:此方法不会在当文件工作在只读模式打开. 语法 以下是truncate()方法的语法: ? 1 fileObject.truncate( [ size

Python中操作文件之write()方法的使用教程

  这篇文章主要介绍了Python中操作文件之write()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 write()方法把字符串str写入文件.没有返回值.由于缓冲,字符串可能不实际显示文件,直到flush()或close()方法被调用. 语法 以下是write()方法的语法: ? 1 fileObject.write( str ) 参数 str -- 这是要被写入的文件中的字符串. 返回值 此方法不返回任何值. 例子 下面的例子显示write()方法的使用. ?

在Python中操作文件之read()方法的使用

  这篇文章主要介绍了在Python中操作文件之read()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 read()方法读取文件size个字节大小.如果读取命中获得EOF大小字节之前,那么它只能读取可用的字节. 语法 以下是read()方法的语法: ? 1 fileObject.read( size ); 参数 size -- 这是可以从文件中读取的字节数. 返回值 此方法返回读取字符串中的字节数. 例子 下面的例子显示了read()方法的使用. ? 1 2 3 4