fi中的计数关键字

2024-10-03 04:33:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算.py文件中的关键字,但我编写的代码也在计算字符串中出现的关键字。 如何区分实际关键字和字符串中的关键字?例如:iswithin是关键字,但您也可以在注释和用户输入字符串中发现这些关键字。这就是我尝试过的:

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)        

Tags: 文件字符串代码nameinpyimportfor
1条回答
网友
1楼 · 发布于 2024-10-03 04:33:36

您可以使用ast.parse来解析代码,创建一个ast.NodeTransformer子类来清除所有字符串节点(无需清除注释,因为注释已经被ast.parse自动忽略),安装^{} 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(因为只有assertFalse被算作关键字)

相关问题 更多 >