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的三目运算符和not in运算符使用示例
Mar 03 Python
Python中的异常处理简明介绍
Apr 13 Python
linecache模块加载和缓存文件内容详解
Jan 11 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
如何基于pythonnet调用halcon脚本
Jan 20 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
Mar 03 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
Apr 10 Python
Python join()函数原理及使用方法
Nov 14 Python
python爬取微博评论的实例讲解
Jan 15 Python
python绘图模块之利用turtle画图
Feb 12 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 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对字符串的递增运算分析
2010/08/08 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
jQuery Ajax文件上传(php)
2009/06/16 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
让python json encode datetime类型
2010/12/28 Python
基于python的汉字转GBK码实现代码
2012/02/19 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
四年级语文教学反思
2014/02/05 职场文书
绩效管理实施方案
2014/03/19 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python