1. 程式人生 > >量刪除C和C++註釋

量刪除C和C++註釋

.cpp os.path 方法 __name__ blog 3.x 回車 imp dir

使用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,回車

(5)去掉了註釋的源代碼將放在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_BEGIN
else: 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++註釋