我正在尝试计算另一个py文件中的关键字数量 在这里我做了什么:
import keyword
infile=open(xx.py,'r')
contentbyword=infile.read().split()
num_of_keywords=0
for word in contentbyword:
if keyword.iskeyword(word) or keyword.iskeyword(word.replace(':','')):
num_of_keywords+=1
我知道它有问题,因为即使关键字在引号内或#符号后面,它也很重要。
那么在python中计算橙色突出显示的单词(IDLE默认值)的更好方法是什么?非常感谢<(_ _)>
答案 0 :(得分:4)
执行此操作的正确方法是使用tokenize模块,该模块负责处理所有边缘情况。
import token
import keyword
import tokenize
s = open('hi.py').readline
counter = 0
l = []
for i in tokenize.generate_tokens(s):
if i.type == token.NAME and keyword.iskeyword(i.string):
counter += 1
l.append(i.string)
print(counter)
print(l)
答案 1 :(得分:0)
下面的代码应该用于python 2.7代码。
import keyword
import re
handle = open("asdf.py","r")
data = str(handle.read())
data = re.sub(r'".*"', r"",data)
data = re.sub(r'#.*' , r"",data)
mystr = data.split()
mykeys = keyword.kwlist
count=0;
for i in mystr:
i = re.sub(r':',r'',i)
if i in mykeys:
print i
count=count+1
else:
count+=0
print count
替换合适的文件名,干杯!
答案 2 :(得分:0)
应该考虑使用Counter:这里有一个片段来根据关键字列表grep文件中的所有关键字:
from collections import Counter
def get_kws(file_in, keywords_list):
with open(file_in) as fin:
# load all content => not suitable for large file
content = fin.read()
# split by non-word
words = re.split(r"\W", content)
counter = Counter(words)
for word, c in counter.items():
if word and word in keywords_list:
yield word, c
编辑:
获取python keywords =>的列表
keywords_list = ['and', 'del', 'from', 'not', 'while', 'as', 'elif', 'global', 'or', 'with', 'assert', 'else', 'if', 'pass', 'yield', 'break', 'except', 'import', 'print', 'class', 'exec', 'in', 'raise', 'continue', 'finally', 'is', 'return', 'def', 'for', 'lambda', 'try']