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 的每一行读取到字典中的正确方法是什么?谢谢!
您可以使用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)
在 for 循环中,您从文件中读取字符串。并且您需要将其转换为 Python dict。您可以使用ast.literal_eval将格式转换str为dict.
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)