Python字典存储为列表中的字符串

时间:2016-02-01 05:20:08

标签: python string list dictionary

我有一个包含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"}}

有没有办法将其存储为字典而无需找到确定不同键和相应值开始/结束的字符索引的方法?或者是否可以以将数据识别为字典的方式读入文件?

4 个答案:

答案 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