Python:如何计算py文件中的关键字?

时间:2015-12-03 13:50:14

标签: python python-3.x

我正在尝试计算另一个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默认值)的更好方法是什么?非常感谢<(_ _)>

3 个答案:

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