python批量删除注释_批量删除C和C++注释

使用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

importosimportsysdefDelComment(src, dst):

fSrc= open(src, 'rb')

fDst= open(dst, 'wb')

out=[]

STATE_NORMAL=0

STATE_BEGIN= 1STATE_LINE_COMMENT= 2STATE_BLOCK_COMMENT= 3STATE_END= 4State=STATE_NORMALwhile 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_COMMENTelif ReadInChar == '*':

State=STATE_BLOCK_COMMENTelse:

State=STATE_NORMAL

out.append('/'+ReadInChar)elif State ==STATE_LINE_COMMENT:if ReadInChar == '\n':

State=STATE_NORMALelif State ==STATE_BLOCK_COMMENT:if ReadInChar == '*':

State=STATE_ENDelif 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()defscanDir(srcpath, dstpath):ifos.path.isdir(srcpath):for files inos.listdir(srcpath):

fSrc=os.path.join(srcpath, files)ifos.path.isfile(fSrc):

scanDir(fSrc, dstpath)else:

fDst=os.path.join(dstpath, files)if notos.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:' +dstpathprint 'convert......'scanDir(srcpath, dstpath)print 'done!'


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部