python -- 將string轉換成dict的方法


裝載自:http://smilejay.com/2014/10/convert_string_to_dict_python/

我將數據庫連接相關的一些用戶名/密碼/host/port等各種東西作為一個string保存在了數據庫中,我要用MySQLdb檢查這些數據庫連接信息是夠能正常使用,需要將數據庫信息中的用戶名/密碼/host/port等信息作為參數傳給MySQLdb.Connect()。者就需要將'{“host”:”192.168.11.22″, “port”:3306, “user”:”abc”,”passwd”:”123″, “db”:”mydb”, “connect_timeout”:10}’”這樣的string轉化為dict。

在python中,將string轉為一個dict,我所知有如下3中方法:
1. ast.literal_eval() 這是我常用的,依賴python2.6以上,據介紹時說比直接eval更安全一些,我沒細究哈。
2. eval() 在string內容比較可控/安全的前提下,eval是不錯的方法。
3. json.loads() 用json提供的loads方法是不錯的,不過key/value中的string被轉化為了unicode哦。

看實例代碼:https://github.com/smilejay/python/blob/master/py2014/string2dict.py

Created on Oct 14, 2014
 
@author: Jay <smile665@gmail.com>
'''
 
import MySQLdb
import ast
import json
 
 
def my_run():
    try:
        s = '{"host":"192.168.11.22", "port":3306, "user":"abc",\
              "passwd":"123", "db":"mydb", "connect_timeout":10}'
        d = ast.literal_eval(s)
        print type(d)
        print d
        d1 = eval(s)
        print type(d1)
        print d1
        d2 = json.loads(s)
        print type(d2)
        print d2
        MySQLdb.Connect(host=d['host'], port=d['port'], user=d['user'],
                        passwd=d['passwd'], db=d['db'],
                        connect_timeout=d['connect_timeout'])
        print 'right'
    except Exception, e:
        print 'wrong %s' % e
 
 
if __name__ == '__main__':
    my_run()

參考資料:
http://stackoverflow.com/questions/988228/converting-a-string-to-dictionary
http://stackoverflow.com/questions/15596121/converting-a-string-into-dictionary-python


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM