Python 文本轉字典/字典轉文本/文本字典轉字典


字典有由鍵值對組成,有key和value,大概長這樣:

{'001' : 'a',  '002' : 'b', '003 ': 'c'}

如果想把內存中的字典存儲為文本文件,文本文件dict.txt的一種形式可以是這樣:

001 a
002 b
003 c

字典轉文本文件

# 先創建並打開一個文本文件
file = open('dict.txt', 'w') 

# 遍歷字典的元素,將每項元素的key和value分拆組成字符串,注意添加分隔符和換行符
for k,v in dict_temp.items():
	file.write(str(k)+' '+str(v)+'\n')
	
# 注意關閉文件
file.close()

# 字典輸出的項是無序的,如果想按照字典的key排序輸出的話,可以按照下面的方式實現
# for k,v in sorted(dict_temp.items()):
# 	file.write(str(k)+' '+str(v)+'\n')
# file.close()

文本文件轉字典

# 聲明一個空字典,來保存文本文件數據
dict_temp = {}

# 打開文本文件
file = open('dict.txt','r')

# 遍歷文本文件的每一行,strip可以移除字符串頭尾指定的字符(默認為空格或換行符)或字符序列
for line in file.readlines():
    line = line.strip()
    k = line.split(' ')[0]
    v = line.split(' ')[1]
    dict_temp[k] = v

# 依舊是關閉文件
f.close()

#  可以打印出來瞅瞅
print(dict_temp)

文本字典轉字典

user_info = '{"name" : "john", "gender" : "male", "age": 28}'

轉換效果:

user_dict = {"name" : "john", "gender" : "male", "age": 28}

有以下幾種方法:

1、通過 json 來轉換

import json
user_info= '{"name" : "john", "gender" : "male", "age": 28}'
user_dict = json.loads(user_info)
user_dict {u'gender': u'male', u'age': 28, u'name': u'john'}

但是使用 json 進行轉換存在一個潛在的問題。 由於 json 語法規定 數組或對象之中的字符串必須使用雙引號,不能使用單引號

2、通過 eval

user_info = '{"name" : "john", "gender" : "male", "age": 28}'
user_dict = eval(user_info)
user_dict {'gender': 'male', 'age': 28, 'name': 'john'}
user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}" user_dict = eval(user_info)
user_dict {'gender': 'male', 'age': 28, 'name': 'john'}

通過 eval 進行轉換就不存在上面使用 json 進行轉換的問題。但是,使用 eval 卻存在安全性的問題,比如下面的例子:

# 讓用戶輸入 `user_info`
user_info = raw_input('input user info: ')
# 輸入 {"name" : "john", "gender" : "male", "age": 28},沒問題
user_dict = eval(user_info)
# 輸入 __import__('os').system('dir'),user_dict 會列出當前的目錄文件!
# 再輸入一些刪除命令,則可以把整個目錄清空了!
user_dict = eval(user_info)

3、通過 literal_eval

import ast
user = '{"name" : "john", "gender" : "male", "age": 28}'
user_dict = ast.literal_eval(user)
user_dict
{'gender': 'male', 'age': 28, 'name': 'john'}

user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}"
user_dict = ast.literal_eval(user_info) 

user_dict
{'name': 'john', 'gender': "male", 'age': '28'}

使用 ast.literal_eval 進行轉換既不存在使用 json 進行轉換的問題,也不存在使用 eval 進行轉換的 安全性問題,因此推薦使用 ast.literal_eval

 


免責聲明!

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



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