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 opencv之SIFT算法示例
Feb 24 Python
python使用代理ip访问网站的实例
May 07 Python
Win8下python3.5.1安装教程
Jul 29 Python
浅谈python的dataframe与series的创建方法
Nov 12 Python
在python 中实现运行多条shell命令
Jan 07 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 Python
解决Jupyter无法导入已安装的 module问题
Apr 17 Python
Python Django搭建网站流程图解
Jun 13 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
Python 使用dict实现switch的操作
Apr 07 Python
python缺失值填充方法示例代码
Dec 24 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站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
详解EasyUi控件中的Datagrid
2017/08/23 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
大学生求职中的自我评价
2013/10/01 职场文书
创业计划书如何吸引他人眼球
2014/01/10 职场文书
三年级音乐教学反思
2014/01/28 职场文书
中式面点餐厅创业计划书
2014/01/29 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
项目合作意向书范本
2014/04/01 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
会计出纳岗位职责
2015/03/31 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android