使用python寫的代碼行數統計程序

原文見:使用python寫的代碼行數統計程序

因爲最近在作的項目很非凡,所使用的語言是一個公司內部的IDE環境,而這個IDE所産生的代碼並不是以文本方式存放的,都是放在二進制文件中,而且由于 這門語言外界幾乎接觸不到,所以沒有針對它的代碼統計程序,當一個模塊完成後要統計代碼行數會很困難,要統計的話必須先把代碼編輯器中的內容拷貝到一個文 本類型的文件中。

正好一直在關注python,還沒有用python寫過程序,今天就利用中午休息的時間寫了一個簡單的代碼統計程序。

對輸入的路徑作遞歸,查找代碼文件,對每一個代碼文件計算它的注釋行數,空行數,真正的代碼行數。

自己用的程序,就寫的粗糙了,也沒加異常處理。

主要的python腳本文件LineCount.py的內容如下:

使用python寫的代碼行數統計程序
import sys;

使用python寫的代碼行數統計程序
import os;

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
class LineCount:

使用python寫的代碼行數統計程序
def trim(self,docstring):

使用python寫的代碼行數統計程序
if not docstring:

使用python寫的代碼行數統計程序
return ''

使用python寫的代碼行數統計程序
lines = docstring.eXPandtabs().splitlines()

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
indent = sys.maxint

使用python寫的代碼行數統計程序
for line in lines[1:]:

使用python寫的代碼行數統計程序
stripped = line.lstrip()

使用python寫的代碼行數統計程序
if stripped:

使用python寫的代碼行數統計程序
indent = min(indent, len(line) - len(stripped))

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
trimmed = [lines[0].strip()]

使用python寫的代碼行數統計程序
if indent < sys.maxint:

使用python寫的代碼行數統計程序
for line in lines[1:]:

使用python寫的代碼行數統計程序
trimmed.append(line[indent:].rstrip())

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
while trimmed and not trimmed[-1]:

使用python寫的代碼行數統計程序
trimmed.pop()

使用python寫的代碼行數統計程序
while trimmed and not trimmed[0]:

使用python寫的代碼行數統計程序
trimmed.pop(0)

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
return '\n'.join(trimmed)

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
def FileLineCount(self,filename):

使用python寫的代碼行數統計程序
(filepath,tempfilename) = os.path.split(filename);

使用python寫的代碼行數統計程序
(shotname,extension) = os.path.splitext(tempfilename);

使用python寫的代碼行數統計程序
if extension == '.txt' or extension == '.hol' : # file type

使用python寫的代碼行數統計程序
file = open(filename,'r');

使用python寫的代碼行數統計程序
self.sourceFileCount += 1;

使用python寫的代碼行數統計程序
allLines = file.readlines();

使用python寫的代碼行數統計程序
file.close();

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
lineCount =0;

使用python寫的代碼行數統計程序
commentCount = 0;

使用python寫的代碼行數統計程序
blankCount = 0;

使用python寫的代碼行數統計程序
codeCount = 0;

使用python寫的代碼行數統計程序
for eachLine in allLines:

使用python寫的代碼行數統計程序
if eachLine != " " :

使用python寫的代碼行數統計程序
eachLine = eachLine.replace(" ",""); #remove space

使用python寫的代碼行數統計程序
eachLine = self.trim(eachLine); #remove tabIndent

使用python寫的代碼行數統計程序
if eachLine.find('--') == 0 : #LINECOMMENT

使用python寫的代碼行數統計程序
commentCount += 1;

使用python寫的代碼行數統計程序
else :

使用python寫的代碼行數統計程序
if eachLine == "":

使用python寫的代碼行數統計程序
blankCount += 1;

使用python寫的代碼行數統計程序
else :

使用python寫的代碼行數統計程序
codeCount += 1;

使用python寫的代碼行數統計程序
lineCount = lineCount + 1;

使用python寫的代碼行數統計程序
self.all += lineCount;

使用python寫的代碼行數統計程序
self.allComment += commentCount;

使用python寫的代碼行數統計程序
self.allBlank += blankCount;

使用python寫的代碼行數統計程序
self.allSource += codeCount;

使用python寫的代碼行數統計程序
PRint filename;

使用python寫的代碼行數統計程序
print ' Total :',lineCount ;

使用python寫的代碼行數統計程序
print ' Comment :',commentCount;

使用python寫的代碼行數統計程序
print ' Blank :',blankCount;

使用python寫的代碼行數統計程序
print ' Source :',codeCount;

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
def CalulateCodeCount(self,filename):

使用python寫的代碼行數統計程序
if os.path.isdir(filename) :

使用python寫的代碼行數統計程序
if not filename.endswith('\\'):

使用python寫的代碼行數統計程序
filename += '\\';

使用python寫的代碼行數統計程序
for file in os.listdir(filename):

使用python寫的代碼行數統計程序
if os.path.isdir(filename + file):

使用python寫的代碼行數統計程序
self.CalulateCodeCount(filename + file);

使用python寫的代碼行數統計程序
else:

使用python寫的代碼行數統計程序
self.FileLineCount(filename + file);

使用python寫的代碼行數統計程序
else:

使用python寫的代碼行數統計程序
self.FileLineCount(self,filename);

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
# Open File

使用python寫的代碼行數統計程序
def __init__(self):

使用python寫的代碼行數統計程序
self.all = 0;

使用python寫的代碼行數統計程序
self.allComment =0;

使用python寫的代碼行數統計程序
self.allBlank = 0;

使用python寫的代碼行數統計程序
self.allSource = 0;

使用python寫的代碼行數統計程序
self.sourceFileCount = 0;

使用python寫的代碼行數統計程序
filename = raw_input('Enter file name: ');

使用python寫的代碼行數統計程序
self.CalulateCodeCount(filename);

使用python寫的代碼行數統計程序
if self.sourceFileCount == 0 :

使用python寫的代碼行數統計程序
print 'No Code File';

使用python寫的代碼行數統計程序
pass;

使用python寫的代碼行數統計程序
print '\n';

使用python寫的代碼行數統計程序
print '***************** All Files **********************';

使用python寫的代碼行數統計程序
print ' Files :',self.sourceFileCount;

使用python寫的代碼行數統計程序
print ' Total :',self.all;

使用python寫的代碼行數統計程序
print ' Comment :',self.allComment;

使用python寫的代碼行數統計程序
print ' Blank :',self.allBlank;

使用python寫的代碼行數統計程序
print ' Source :',self.allSource;

使用python寫的代碼行數統計程序
print '****************************************************';

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
myLineCount = LineCount();

可以看到extension == '.txt' or extension == '.hol'這句是判定文件的後綴,來確定是否要計算代碼行數。

if eachLine.find('--') == 0 :這句來判定當前行是不是單行注釋(我們的這門語言不支持塊注釋)。

爲了能在其他機器上運行,使用了py2exe來把python腳本生成可執行的exe,setup.py腳本內容如下:

使用python寫的代碼行數統計程序
from distutils.core import setup

使用python寫的代碼行數統計程序
import py2exe

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
setup(

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
version = "0.0.1",

使用python寫的代碼行數統計程序
description = "LineCount",

使用python寫的代碼行數統計程序
name = "LineCount",

使用python寫的代碼行數統計程序

使用python寫的代碼行數統計程序
console = ["LineCount.py"],

使用python寫的代碼行數統計程序
)

使用python寫的代碼行數統計程序

不過生成exe後程序臃腫很多,有3M多。

感覺使用python確實是件很舒服的事。

使用python寫的代碼行數統計程序
  原文見:使用python寫的代碼行數統計程序因爲最近在作的項目很非凡,所使用的語言是一個公司內部的IDE環境,而這個IDE所産生的代碼並不是以文本方式存放的,都是放在二進制文件中,而且由于 這門語言外界幾乎接觸...查看完整版>>使用python寫的代碼行數統計程序
 
使用python寫的代碼行數統計程序
  原文見:使用python寫的代碼行數統計程序因爲最近在作的項目很非凡,所使用的語言是一個公司內部的IDE環境,而這個IDE所産生的代碼並不是以文本方式存放的,都是放在二進制文件中,而且由于 這門語言外界幾乎接觸...查看完整版>>使用python寫的代碼行數統計程序
 
使用javascript寫的操作系統和輸入法程序
  JavaScript是一門客戶端的腳本語言,但是你千萬不要認爲它功能弱哦,因爲你看了下面的例子之後就明白了。  一. 用JavaScript寫的操作系統  呵呵,那天同事開玩笑說,要是有個用JS寫的操作系統就好了. 我們都笑...查看完整版>>使用javascript寫的操作系統和輸入法程序
 
使用JavaScript寫的操作系統和輸入法程序
JavaScript是一門客戶端的腳本語言,但是你千萬不要認爲它功能弱哦,因爲你看了下面的例子之後就明白了。一. 用JavaScript寫的操作系統呵呵,那天同事開玩笑說,要是有個用JS寫的操作系統就好了. 我們都笑他異想天開,...查看完整版>>使用JavaScript寫的操作系統和輸入法程序
 
使用JavaScript寫的操作系統和輸入法程序
JavaScript是一門客戶端的腳本語言,但是你千萬不要認爲它功能弱哦,因爲你看了下面的例子之後就明白了。一. 用JavaScript寫的操作系統呵呵,那天同事開玩笑說,要是有個用JS寫的操作系統就好了. 我們都笑他異想天開,...查看完整版>>使用JavaScript寫的操作系統和輸入法程序
 
使用開源代碼寫linux程序
  序  linux下編程沒有現成的東西都要自己寫,但網上有不少開源作品可以複用,僅以此篇抛轉引玉,也想讓大家互相交流如何有效的使用這些資源,千萬別吝啬你的經驗。  由來  小時候很喜歡看卡通漫畫,最近偶然...查看完整版>>使用開源代碼寫linux程序
 
值得紀念,我寫的第一個Python小模塊~(循環讀命令行提供的文件)
#my first python program :}import stringdef _ReadFile(text,numlines): lines = string.split(text,'\n') while lines: chunk = lines[:numlines] for line in chunk: if line: ...查看完整版>>值得紀念,我寫的第一個Python小模塊~(循環讀命令行提供的文件)
 
Python代碼高亮顯示工具
轉換成網頁格式,可以自己定制高亮格式,程序已經打包成exe了具體可以訪問我的主頁至于程序效果,可以參考我發的其他Python源代碼...查看完整版>>Python代碼高亮顯示工具
 
用python實現面向對像的ASP程序.
平時我們寫ASP時,一般都用vbscript或javascript.javascript是用function來實現類的,很麻煩,而且效果不爽. vbscript雖然可以實現類,但是功能上也有很大的局限性.如果用python來寫ASP腳本,就可以實現真的類,成爲真正的...查看完整版>>用python實現面向對像的ASP程序.
 
 
回到王朝網路移動版首頁