量刪除C和C++註釋
阿新 • • 發佈:2017-08-17
.cpp os.path 方法 __name__ blog 3.x 回車 imp dir (5)去掉了註釋的源代碼將放在d:\dst目錄中
使用Python語言 ,實現批量刪除C/C++類型註釋
1.目前支持去掉.h .hpp .c .cpp .java 這些以//或/**/為註釋符的源文件
2.支持遞歸遍歷目錄
3.當前版本為Python2.7版本,故只有安裝了Python2.7(或Python3.x以下版本的才可以直接使用,測試沒問題後將編出exe直接使用)
4.使用方法:
(1)建立源目錄,如d:\src(路徑中最好不要有中文);
(2)建立目標目錄,如d:\dst(路徑中最好不要有中文);
(3)將RemoveComment.py放到某處(路徑中最好不要有中文),如d:\RemoveComment.py
(4)打開cmd,輸入切換到(3)中RemoveComment.py所在的目錄(這裏是d:\),輸入python RemoveComment.py d:\src d:\dst,回車
http://download.csdn.net/download/zp373860147/4361780
#coding:utf-8 import os import sys def DelComment(src, dst): fSrc = open(src, ‘rb‘) fDst = open(dst, ‘wb‘) out = [] STATE_NORMAL = 0 STATE_BEGIN = 1 STATE_LINE_COMMENT= 2 STATE_BLOCK_COMMENT = 3 STATE_END = 4 State = STATE_NORMAL while 1: ReadInChar = fSrc.read(1) if ReadInChar == ‘‘: break; if State == STATE_NORMAL: if ReadInChar == ‘/‘: State = STATE_BEGINelse: out.append(ReadInChar) elif State == STATE_BEGIN: if ReadInChar == ‘/‘: State = STATE_LINE_COMMENT elif ReadInChar == ‘*‘: State = STATE_BLOCK_COMMENT else: State = STATE_NORMAL out.append(‘/‘+ReadInChar) elif State == STATE_LINE_COMMENT: if ReadInChar == ‘\n‘: State = STATE_NORMAL elif State == STATE_BLOCK_COMMENT: if ReadInChar == ‘*‘: State = STATE_END elif State == STATE_END: if ReadInChar == ‘/‘: State = STATE_NORMAL ReadInChar = fSrc.read(1) while ReadInChar == ‘\r‘ or ReadInChar == ‘\n‘: ReadInChar = fSrc.read(1) fSrc.seek(-1, 1) else: State = STATE_BLOCK_COMMENT fSrc.seek(-1, 1) fDst.writelines(out) fDst.flush() fDst.close() fSrc.close() def scanDir(srcpath, dstpath): if os.path.isdir(srcpath): for files in os.listdir(srcpath): fSrc = os.path.join(srcpath, files) if os.path.isfile(fSrc): scanDir(fSrc, dstpath) else: fDst = os.path.join(dstpath, files) if not os.path.exists(fDst): os.mkdir(fDst) scanDir(fSrc, fDst) else: if srcpath.endswith((‘.h‘,‘.c‘,‘.cpp‘,‘.hpp‘,‘.jave‘): DelComment(srcpath, os.path.join(dstpath, os.path.basename(srcpath))) if __name__ == ‘__main__‘: paramlen = len(sys.argv) if paramlen!=3: print ‘輸入參數錯誤‘ sys.exit(1) srcpath = sys.argv[1].rstrip(‘\\‘).rstrip(‘/‘) print ‘src_path: ‘ + srcpath dstpath = sys.argv[2].rstrip(‘\\‘).rstrip(‘/‘) print ‘dst_path: ‘ + dstpath print ‘convert......‘ scanDir(srcpath, dstpath) print ‘done!‘
量刪除C和C++註釋