Python删除Java源文件中全部注释的实现方法


Posted in Python onAugust 30, 2017

本文实例讲述了Python删除Java源文件中全部注释的实现方法。分享给大家供大家参考,具体如下:

同事想删除一个Java项目中的全部注释,让我帮忙想想办法。

没找不到合适工具,就写了这个脚本,遍历指定目录,查找*.java文件,删除其中/* */之间,及// 至行末的内容。

(用之前要改改其中的路径):

#!D:\Python32
# 过滤JAVA程序中的注释
# 如果字符串中有注释符号的话会有问题。
import os
import re
import io
# 改这个目录!!!
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;
def trim_dir(path):
 print("目录:" + path);
 for root, dirs, files in os.walk(path):
  for name in files:
   trim_file(os.path.join(root, name))
  #for name in dirs:
   #trim_dir(os.path.join(root, name))
def trim_file(path):
 print("文件:" + path);
 if re.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;
 for line in fp_src.readlines():
  for c in line:
   if state == S_INIT:
    if c == '/':
     state = S_SLASH;
    elif c == '"''"':
     state = S_STR;
     fp_dst.write(c);
    else:
     fp_dst.write(c);
   elif state == S_SLASH:
    if c == '*':
     state = S_BLOCK_COMMENT;
    elif c == '/':
     state = S_LINE_COMMENT;
    else:
     fp_dst.write('/');
     fp_dst.write(c);
   elif state == S_BLOCK_COMMENT:
    if c == '*':
     state = S_BLOCK_COMMENT_DOT;
   elif state == S_BLOCK_COMMENT_DOT:
    if c == '/':
     state = S_INIT;
    else:
     state = S_BLOCK_COMMENT;
   elif state == S_LINE_COMMENT:
    if c == '\n':
     state = S_INIT;
   elif state == S_STR:
    if c == '\\':
     state = S_STR_ESCAPE;
    elif c == '"':
     state = S_INIT;
    fp_dst.write(c);
   elif state == 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中利用函数装饰器实现备忘功能
Mar 30 Python
Python实现监控程序执行时间并将其写入日志的方法
Jun 30 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
Python切换pip安装源的方法详解
Nov 18 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
pycharm内无法import已安装的模块问题解决
Feb 12 Python
python数据爬下来保存的位置
Feb 17 Python
利用Python计算KS的实例详解
Mar 03 Python
python删除某个目录文件夹的方法
May 26 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 Python
python绘制分布折线图的示例
Sep 24 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 07 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 #Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 #Python
Python导入模块时遇到的错误分析
Aug 30 #Python
简单学习Python多进程Multiprocessing
Aug 29 #Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 #Python
Python实现文件内容批量追加的方法示例
Aug 29 #Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 #Python
You might like
php array_search() 函数使用
2010/04/13 PHP
php 文件缓存函数
2011/10/08 PHP
php中批量修改文件后缀名的函数代码
2011/10/23 PHP
php调用shell的方法
2014/11/05 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
jquery.lazyload  实现图片延迟加载jquery插件
2010/02/06 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
python如何编写win程序
2020/06/08 Python
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
公司成立感言
2014/01/11 职场文书
家长评语大全
2014/01/22 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
超市店庆活动方案
2014/08/31 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
公司表扬稿范文
2015/05/05 职场文书
食品安全责任书范本
2015/05/09 职场文书
2016党校培训心得体会
2016/01/07 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
详解Spring事件发布与监听机制
2021/06/30 Java/Android
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL