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

本程序采用Python实现批量删除C/C++源文件(.h,.hpp,.c,.cpp,.java)中的注释,支持递归遍历指定目录,并将处理后的文件保存到目标目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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.youkuaiyun.com/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!'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值