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异常和文件处理机制详解
Jul 19 Python
python使用 HTMLTestRunner.py生成测试报告
Oct 20 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
10个Python小技巧你值得拥有
Sep 29 Python
python isinstance函数用法详解
Feb 13 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
Python使用ElementTree美化XML格式的操作
Mar 06 Python
在django项目中导出数据到excel文件并实现下载的功能
Mar 13 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
Python wordcloud库安装方法总结
Dec 31 Python
Python3爬虫RedisDump的安装步骤
Feb 20 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 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运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
PHP登录(ajax提交数据和后台校验)实例分享
2016/12/29 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
详解Angular路由之路由守卫
2018/05/10 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
Python中使用partial改变方法默认参数实例
2015/04/28 Python
Python中import机制详解
2017/11/14 Python
python opencv之分水岭算法示例
2018/02/24 Python
python多维数组切片方法
2018/04/13 Python
django ajax json的实例代码
2018/05/29 Python
Python闭包思想与用法浅析
2018/12/27 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
比利时香水网上商店:NOTINO
2018/03/28 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
博士生入学考试推荐信
2013/11/17 职场文书
初中考试作弊检讨书
2014/02/01 职场文书
营业用房租赁协议书
2014/11/26 职场文书
监守自盗观后感
2015/06/10 职场文书