zoukankan      html  css  js  c++  java
  • python ConfigParser 小试

    由于工作需要,需要将数据库的int型数据转换成string类型放到页面上,并从页面上拿回string类型转换成可以作为sql查询参数的int型数据。注,这个string类型的字串和int型数据纯属于人工自定义的编码行为,因此需要用到config文件。

    查到python有ConfigParser,这个还蛮好用的,赶紧试了一下:

    1.设计config文件:config.cfg,文件分为很多个section,每个section包含很多对key-value;如下:

      

    [server type]
    1= App Server
    2= WriteBack Server
    3= Memcache Server
    4= Database Server
    
    [server status]
    0= added
    1= monitored
    2= crashed
    3= deleted
    4= alerted
    
    [alert type]
    1= email alert
    2= sms alert
    
    [server monitor status]
    0= Alert
    1= Don't Alert

    2.读取配置文件:

    def readConfig(type, value='1'):
        config = ConfigParser.ConfigParser()
        #type = "ServerStatus"
        value = str(value)
        try:
            with open("./static/data/config.cfg","r") as cfgfile:
                config.readfp(cfgfile)
                if type == "ServerType":
                    items = dict(config.items('server type'))
                elif type == "ServerStatus":
                    items = dict(config.items('server status'))
                elif type == "AlertType":
                    items = dict(config.items('alert type'))
                elif type == "MonitorStatus":
                    items = dict(config.items('server monitor status'))
                data = items[value]
                print data
                return data
        except Exception:
            print 'error in readConfig when setting new host string by config file'
    

      在每次从数据库取到数据时,调用这个readConfig方法将拿到的数据进行config成string,再传到页面进行显示。结果很顺利!

    但是问题也随之来了,我还要从页面上拿回这个String传到后台作为取数据的sql参数,但是这个与数据库毫无关系的string如何转换成int呢?我想了一个dconfig,就是反config回来啦!但是蹊跷的是,同样的方法,却得到了一个int() argument must be a string or a number, not 'NoneType'的错误,于是查找定位到我在初始化value这个参数的时候传了一个空串,然后被当做None,int(None)是不被接受的。改掉,依旧不行。打印传回来的参数:

    alerted
    App Server

    于是做了个小测试,发现alerted能找到它的对应值,但是App Server找不到,改成小写的’app server‘结果又找到了,真是坑爹,去看下文档有没有说明不接受大写字符串,或者是有存在编码问题?

    最后将config的文件里全改成小写,做测试,好莫名其妙啊!打印出来竟然还是:

    alerted
    App Server

    Why??明明文件已经保存了!难道这cfg文件是要缓存到客户端里的?不可能,明明是后台调用的,好吧,我把你删掉再建一个,放进去小写,重启动。ok了!这次变小些了,只是页面上显示的还是小写的,未必符合要求。

    ConfigParser是个好东西,python的库就是封装的好啊!关于config的事情,如果没有特殊要求,基本上够用啦。。。。

    忽然想到一个事情,我这典型的交互和需要config的次数太多,我为啥不考虑把config的一个key-value都传到客户端嗯?再客户端显示的时候用string的value,返回查询用的int的key,岂不是一举两得?

  • 相关阅读:
    spark streaming 概述
    spark sql 的性能调优
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal (用中序和后序树遍历来建立二叉树)
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal (用先序和中序树遍历来建立二叉树)
    LeetCode 90. Subsets II (子集合之二)
    LeetCode 88. Merge Sorted Array(合并有序数组)
    LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)
    LeetCode 80. Remove Duplicates from Sorted Array II (从有序序列里移除重复项之二)
    LeetCode 79. Word Search(单词搜索)
    LeetCode 78. Subsets(子集合)
  • 原文地址:https://www.cnblogs.com/xiami303/p/2653922.html
Copyright © 2011-2022 走看看