我正在尝试计算is
文件中的关键字,但是我编写的代码也计算了字符串中出现的关键字。
如何区分实际关键字和字符串关键字?例如:with
,in
和from collections import Counter
import keyword
count = {}
scode = input("Enter the name of Python source code file name :")
with open(scode,'r') as f:
for line in f:
words = line.split()
for i in words:
if(keyword.iskeyword(i)):
count[i]= count.get(i,0)+1
print(count)
是关键字,但是您也可以在注释和用户输入字符串中发现它们。这是我尝试过的:
rawQuery()
答案 0 :(得分:4)
您可以使用ast.parse
来解析代码,创建一个ast.NodeTransformer
子类来清除所有字符串节点(无需清除注释,因为注释已被ast.parse
自动忽略),安装astunparse
package以将节点转换回源代码,然后计算关键字:
import ast
import astunparse
import keyword
import re
class clear_strings(ast.NodeTransformer):
def visit_Str(self, node):
node.s = ''
return node
n = ast.parse('''
a = 'True'
assert False
# [[] for _ in range(9)]
"""if"""
''')
clear_strings().visit(n)
print(sum(map(keyword.iskeyword, re.findall(r'\w+', astunparse.unparse(n)))))
此输出:2
(因为仅将assert
和False
计为关键字)