我有一个包含Python字典的txt文件,我已按以下方式打开它:
with open('file') as f:
test = list(f)
当我查看test时的结果是一个元素的列表。第一个元素是字典的字符串(也包含其他字典),所以它看起来像:
["ID": 1, date: "2016-01-01", "A": {name: "Steve", id: "534", players:{last: "Smith", first: "Joe", job: "IT"}}
有没有办法将其存储为字典而无需找到确定不同键和相应值开始/结束的字符索引的方法?或者是否可以以将数据识别为字典的方式读入文件?
答案 0 :(得分:2)
如果您正在阅读json
文件,则可以使用json
模块。
import json
with open('data.json') as f:
data = json.load(f)
如果你确定你正在阅读的文件包含python词典,那么你可以使用内置的ast.literal_eval
将这些字符串转换为Python字典:
>>> import ast
>>> a = ast.literal_eval("{'a' : '1', 'b' : '2'}")
>>> a
{'a': '1', 'b': '2'}
>>> type(a)
<type 'dict'>
还有另一种方法eval
。但使用ast.literal_eval
会更好。这个answer将解释原因。
答案 1 :(得分:0)
您可以使用json模块
撰写
import json
data = ["ID": 1, date: "2016-01-01", "A": {name: "Steve", id: "534", players:{last: "Smith", first: "Joe", job: "IT"}}
with open("out.json", "w") as f:
json.dump(data)
阅读
import json
with open("out.json", "w") as f:
data = json.load(f)
print data
答案 2 :(得分:0)
从文件中读取时,只需使用eval()
。
例如:
>>> f = open('file.txt', 'r').read()
>>> mydict = eval(f)
>>> type(f)
<class 'str'>
>>> type(mydict)
<class 'dict'>
答案 3 :(得分:0)
Python解释器认为您只是尝试将外部文件作为文本读取。它不知道您的文件包含格式化内容。作为字典轻松导入的一种方法是编写包含字典的第二个python文件:
# mydict.py
myImportedDict = {
"ID": 1,
"date": "2016-01-01",
"A": {
"name": "Steve",
"id": "534",
"players": {
"last": "Smith",
"first": "Joe",
"job": "IT"
}
}
}
然后,您可以导入字典并在另一个文件中使用它:
#import_test.py
from mydict import myImportedDict
print(type(myImportedDict))
print(myImportedDict)
Python还要求包含导入文件的文件夹也包含名为
的文件__init__.py
可以是空白的。因此,除了上面的两个文件之外,还要创建一个具有该名称的空白文件。
如果您的源文件是JSON格式,则可以使用json库,它与Python一起打包:https://docs.python.org/2/library/json.html