Python删除Java源文件中全部注释的实现方法
本文实例讲述了Python删除Java源文件中全部注释的实现方法。分享给大家供大家参考,具体如下:
同事想删除一个Java项目中的全部注释,让我帮忙想想办法。
没找不到合适工具,就写了这个脚本,遍历指定目录,查找*.java文件,删除其中/**/之间,及//至行末的内容。
(用之前要改改其中的路径):
#!D:\Python32
#过滤JAVA程序中的注释
#如果字符串中有注释符号的话会有问题。
importos
importre
importio
#改这个目录!!!
top_dir="E:\\java_comments_trim\\";
#状态
S_INIT=0;
S_SLASH=1;
S_BLOCK_COMMENT=2;
S_BLOCK_COMMENT_DOT=3;
S_LINE_COMMENT=4;
S_STR=5;
S_STR_ESCAPE=6;
deftrim_dir(path):
print("目录:"+path);
forroot,dirs,filesinos.walk(path):
fornameinfiles:
trim_file(os.path.join(root,name))
#fornameindirs:
#trim_dir(os.path.join(root,name))
deftrim_file(path):
print("文件:"+path);
ifre.match(".*java{1}quot;,path):
print("处理");
else:
print("忽略");
return;
bak_file=path+".bak";
os.rename(path,bak_file);
fp_src=open(bak_file);
fp_dst=open(path,'w');
state=S_INIT;
forlineinfp_src.readlines():
forcinline:
ifstate==S_INIT:
ifc=='/':
state=S_SLASH;
elifc=='"''"':
state=S_STR;
fp_dst.write(c);
else:
fp_dst.write(c);
elifstate==S_SLASH:
ifc=='*':
state=S_BLOCK_COMMENT;
elifc=='/':
state=S_LINE_COMMENT;
else:
fp_dst.write('/');
fp_dst.write(c);
elifstate==S_BLOCK_COMMENT:
ifc=='*':
state=S_BLOCK_COMMENT_DOT;
elifstate==S_BLOCK_COMMENT_DOT:
ifc=='/':
state=S_INIT;
else:
state=S_BLOCK_COMMENT;
elifstate==S_LINE_COMMENT:
ifc=='\n':
state=S_INIT;
elifstate==S_STR:
ifc=='\\':
state=S_STR_ESCAPE;
elifc=='"':
state=S_INIT;
fp_dst.write(c);
elifstate==S_STR_ESCAPE:
#这里未完全实现全部序列,如\oNNN\xHH\u1234\U12345678,但没影响
state=S_STR;
fp_dst.write(c);
fp_src.close();
fp_dst.close();
trim_dir(top_dir);
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python字符串操作技巧汇总》、《Python文本文件操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。