簡介
用python腳本,計算給定目錄下的,所有C/C++代碼的行數。
運行平臺:CentOS 6.3
代碼
#! /usr/bin/python
'''
File : CodeLine.py
Author : HCLAC
E-Mail : [email protected]
'''
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等關鍵字後記得添加冒號: