今天正打算看代码,忽然感觉一个代码分析的工具还是必不可少……之前下载的Understand什么的,用起来各种不好用是真的……所以今天拿python先写了一个词频分析的小工具,花了好几个小时 = =# 因为写的时候发现python好多函数也并不知道,一边写一遍百度。然而还是有点着急,好多模块并没有弄清楚,先mark一下以后再说:
1. codes: 以其他格式读写文件;但是没成功,我后来用 file.read().decode(‘utf-8’)也不好用,说是ascii码转换不了什么的种种;
2. re:正则表达式;因为要匹配的字符还包含各种括号引号斜杠,也是没有用好,干脆直接split循环暴力解决了最后;
3. 最后输出的时候中文字符串全部没有输出,取而代之输出到目标文件中的是一个空字符,而且显示这个空字符的数量是最庞大的了,所以应该就是代表中文字符串
好了进入正文
不贴代码也不写注释了因为9点了宝宝要回家了嗷嗷嗷 0.0 ……
全局配置……
g_readfilepath = "E:/XXX/"
f_writefilename = "E:/test.txt"
g_file_postfix = ('.cpp', '.h', '.ipp', )
g_split_char = ('!', ' ', '#', '"', "'", '&', ')', '(', '+', '*', '-', ',', '/', '.', ';', ':', '=', '<', '>', '[', ']', '\\', '{', '}', '|', '~', )
g_split_re = '[!#&)(+*-,/.;:=<>}|~]'
g_wordchar = frozenset(('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', '', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', '', 'V', 'W', 'X', 'Y', 'Z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '_', ))
g_ifIgnoreSysWord = True
g_word = frozenset(('const', 'if', 'return', 'void', 'virtual', 'class',
'int', 'char',
'true', 'false', ))
g_ifIgnoreDigit = True
类……
class FileNode(object):pass
class FileTree(FileNode):pass
函数……
def ifCareFile(filename):pass
def splitStr(string):pass
def analysisUnwordchar(file_tree):pass #这个只用来输出上边的g_split_char
def analysisWord(file_tree):pass
def printSort_file(analysisRes, writefilename):pass
def main():
file_tree = FileTree(g_readfilepath)
ana_res = analysisWord(file_tree)
printSort_file(ana_res, f_writefilename)
我分析了一个文件,速度居然还挺快……是我小看python了……
- 2320586
GetWndManager - 38765
getResourceManager - 37081
cacheUIR - 36754
AddCustomizedPosition - 21516
parent - 15876
CLRect - 15831
AddCustomizedRect - 14823
id - 14755
infoMap - 13139
Create - 13003
ParseXml - 12554
InitID - 12454
InitPosition - 12450
this - 11563
i - 11056
。。。
统计后感:
- 我发现用到的最多的是死代码……也就是程序生成的那部分代码……如何找到关键函数还是任重道远啊
- 0乃数字之最!其次是1280和768……其次是1 =。=
- 前四个系统关键字是 void、int、if、virtual
- 下一步可以开始考虑分析类层次和类调用了,因为顺便输出了下某个大文件夹下所有文件数量发现也不过2000来个~