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多线程编程(四):使用Lock互斥锁
Apr 05 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
python实现简易版计算器
Jun 22 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
Python实现App自动签到领取积分功能
Sep 29 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
Python面向对象之类和实例用法分析
Jun 08 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 Python
Python实现智慧校园自动评教全新版
Jun 18 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
利用Node.js+Koa框架实现前后端交互的方法
2017/02/27 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
Python中http请求方法库汇总
2016/01/06 Python
python Django模板的使用方法
2016/01/14 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
如何用itertools解决无序排列组合的问题
2017/05/18 Python
python使用RNN实现文本分类
2018/05/24 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
Python数据集切分实例
2018/12/08 Python
python简单验证码识别的实现方法
2019/05/10 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
Python 使用office365邮箱的示例
2020/10/29 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
2015年保安个人工作总结
2015/04/02 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
初中地理教学反思
2016/02/19 职场文书
服务器间如何实现文件共享
2022/05/20 Servers