所以在Python命令行:
th = {u'category': u'Hair Color'}
>>> print q
{u'category': u'Hair Color'}
>>> print th['category']
Hair Color
这很好用。但现在让我说我有一个名为ant.txt
的文件具有相同的内容:
{u'category': u'Hair Color'}
我再次想要像上面一样打印对象和成员。
>>> f = open('ant.txt')
>>> q = f.read()
>>> print q
{u'category': u'Hair Color'}
>>> print q['category']
Traceback (most recent call last):
File "<pyshell#230>", line 1, in <module>
print q['category']
TypeError: string indices must be integers, not str
我知道错误的原因是我没有指定整数。但是,当我从文件加载而不是在命令行创建时,为什么我会在这里得到错误?
从文件中读取时,我需要更改为print q['category']
?
答案 0 :(得分:1)
f.read()
读入文件的内容并将其作为字符串对象返回。您可以通过删除print
并输入q
:
>>> q
"{u'category': u'Hair Color'}"
>>> print q # 'print' removes the quotes on each end.
{u'category': u'Hair Color'}
>>>
要将字典的字符串表示形式转换为实际字典对象,可以使用ast.literal_eval
:
import ast
q = ast.literal_eval(f.read())
以下是演示:
>>> import ast
>>> q = "{u'category': u'Hair Color'}" # Data read from file
>>> type(q)
<class 'str'>
>>> q = ast.literal_eval(q)
>>> q
{'category': 'Hair Color'}
>>> type(q)
<class 'dict'>
>>> q['category']
'Hair Color'
>>>