Python:将文本文件(每一行都是字典结构)读取到字典中

Eda*_*ame 5 python dictionary file

我正在尝试将文件读取到字典中,每一行都已经采用字典格式:

输入.txt:

{u'FirstName': u'John', u'Title': u'Mr', u'LastName': u'Doe'}
{u'FirstName': u'Mary', u'Title': u'Ms', u'LastName': u'Doe'}
Run Code Online (Sandbox Code Playgroud)

然后我尝试执行以下操作:

with open("input.txt", "r") as ins:
    for line in ins:
        data = {}
        data = line
        print(data["Title"])
Run Code Online (Sandbox Code Playgroud)

我得到了错误:

    <ipython-input-18-a5a5994a6c1d> in main()
         18             data = {}
         19             data = line
    ---> 20             print(data["Title"])
         21 
         22 

TypeError: string indices must be integers, not str
Run Code Online (Sandbox Code Playgroud)

我错过了什么以及将 input.txt 的每一行读取到字典中的正确方法是什么?谢谢!

Iro*_*ist 5

您可以使用astliteral_eval库中的方法,如下所示:

import ast
with open("input.txt", "r") as ins:
    for line in ins:
        data = ast.literal_eval(line)
        print(data["Title"])
        print type(data) #To Check data type
Run Code Online (Sandbox Code Playgroud)

现在,在您的原始代码上:

with open("input.txt", "r") as ins:
    for line in ins:
        data = {} #You are creating a new dictionary every iteration of for loop
        data = line #Re-defining data, which becomes string
        print(data["Title"]) #Then here you try index the data (string) with  a string ...that's wrong, string indexes are intergers 
Run Code Online (Sandbox Code Playgroud)


kvo*_*iev 0

在 for 循环中,您从文件中读取字符串。并且您需要将其转换为 Python dict。您可以使用ast.literal_eval将格式转换strdict.

import ast
with open("input.txt", "r") as ins:
    for line in ins:
        data = ast.literal_eval(line)
        print(data["Title"])
Run Code Online (Sandbox Code Playgroud)