简介
用python脚本,计算给定目录下的,所有C/C++代码的行数。
运行平台:CentOS 6.3
代码
#! /usr/bin/python
'''
File : CodeLine.py
Author : HCLAC
E-Mail : hclac@sina.com
'''
import sys, os
# global variable
extens = [".c", ".cpp", ".hpp", ".h"]
linesCount = 0
filesCount = 0
def funCount(dirName):
global extens, linesCount, filesCount
for root, dirs, fileNames in os.walk(dirName):
for f in fileNames:
fname = os.path.join(root, f)
try :
ext = f[f.rindex('.'):]
if(extens.count(ext) > 0):
print 'support'
filesCount += 1
print fname
l_count = len(open(fname).readlines())
print fname,": ",l_count
linesCount += l_count
else:
print ext, ":not support"
except:
print "Error occur!!!"
pass
#main
if len(sys.argv)> 1:
for m_dir in sys.argv[1:]:
print m_dir
funCount(m_dir)
else :
funCount("./")
print "files count: ", filesCount
print "lines count: ", linesCount
raw_input("Press Enter to continue")
运行结果
变量说明
- 普通变量
linesCount = 0:直接定义,不用写类型名称,python自动识别是字符、字符串、整数、浮点数。 - 数组
extens = [“.c”, “.cpp”, “.hpp”, “.h”]:定义字符串数组,数组名称为extens,数据定义在[]之间,用”“包含每个数据,用”,”分割数据。
对数组的操作:
- extens[-1]:数组的负索引,表示.h
- extens[1:3]:对数组分片,显示.cpp .hpp,不包含第4个元素
- extens.append(“.py”):从后面添加新数据。
- extens.insert(2, “.py”):在第二个数据之后添加新数据。
- extens.extend([“.py”, “.o”, “.a”]):从后面添加多个新数据。
- extens.index(“.h”):在数组中搜索元素。
- “.h” in extens:判断是否在数组中,是返回True
- extens.remove(“.h”):删除元素。
- extens.pop():从后面删除一个元素。
- extens+=”.txt”:从后面添加新元素。
代码说明
主要思路:
从当前目录遍历所有文件夹,找到后缀是.h,.hpp,.c,.cpp的文件,打开文件,获取行数,加起来就是总行数。
- for root, dirs, fileNames in os.walk(dirName):使用os.walk函数,遍历dirName的目录下的所有文件夹和文件,分别保存在dirs和fileNames变量中,这两个变量都是list类型的,root保存着当前目录的路径。
- for f in fileNames:遍历fileNames列表,将文件名称保存在f变量中。
os.path.join(first, second):将first的字符串和second的字符串串联起来,返回给另外一个变量
- l_count = len(open(fname).readlines()):使用open函数打开文件,readlines()函数获取文件代码行列表,len()获取列表的个数。
注意
for,if,else,def等关键字后记得添加冒号: