为什么我从文件数据而不是命令行打印错误

时间:2014-11-03 23:13:43

标签: python file dictionary

所以在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']

1 个答案:

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