计算每个关键字和每个标识符的出现

时间:2019-12-30 13:38:59

标签: python python-3.x keyword counting identifier

我试图计算问题给我的单词中的关键字和标识符,但是我不确定是否正确,所以请帮助我找出我在问题中提出的问题。 问题是这样的:

编写一个程序,该程序读取Python源代码文件,并使用两个字典对文件中每个关键字和每个标识符(变量,类和方法名)的出现进行计数:一个用于关键字,一个用于标识符。您的程序应提示用户输入Python源代码文件名。 Python编程语言中的关键字:False类终于返回return for lambda try非本地while的True def和del global not或yield断言else import pass break除外,如elif提高

Python编程语言中的关键字:

False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise

这是我编写的代码:

import tokenize
import keyword
import collections 
with open('source.py') as f:
    tokens = (token for _, token, _, _, _ in tokenize.generate_tokens(f.readline))
    c = collections.Counter(token for token in tokens if keyword.iskeyword(token))

print(c)

1 个答案:

答案 0 :(得分:0)

根据您的评论,从技术上讲c不是字典,它是collections.Counter对象:

print(c, type(c))

输出:

Counter({'False': 1, 'True': 1}) <class 'collections.Counter'>

您可以像这样将其转换为内置字典:

c = dict(c)
print(c, type(c))

输出:

{'False': 1, 'True': 1} <class 'dict'>

如您所见,它摆脱了Counter()对象。

这不是很漂亮,但是如果您只知道应该有两个字典,那么第二位是最正确的。

但是,再次阅读您的问题似乎需要为(1):关键字(已提供)和(2)标识符制作字典:标识符是给诸如类,函数,变量等实体的名称。它有助于将一个实体与另一个实体区分开。您能否提供python文件:source.py?