删除c,c++,java源文件中全部注释的Python脚本

简介: #!D:\Python32 # -*- coding: utf-8-*- # 过滤JAVA程序中的注释 # 如果字符串中有注释符号的话会有问题。 import os import re import io # 改这个目录!!! top_dir = "E:\\work2\\...
#!D:\Python32
# -*- coding: utf-8-*-
# 过滤JAVA程序中的注释
# 如果字符串中有注释符号的话会有问题。

import os
import re
import io

# 改这个目录!!!
top_dir = "E:\\work2\\";

# 状态
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("dir:" + 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("file:" + path);
  if re.match(r".*?\.(java|c|cpp|h)$", path):
    print("process");
  else:
    print("ignore");
    return;

  bak_file = path + ".bak";
  try:
    os.rename(path, bak_file);
  except:
    print "bak except",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);
          state=S_INIT;
      elif state == S_BLOCK_COMMENT:
        if c == '*':
          state = S_BLOCK_COMMENT_DOT;
      elif state == S_BLOCK_COMMENT_DOT:
        if c == '/':
          state = S_INIT;
        elif c=='*':
          state=S_BLOCK_COMMENT_DOT; #再次碰到*号还是要继续状态,否则会出错
        else:
          state = S_BLOCK_COMMENT;
      elif state == S_LINE_COMMENT:
        if c == '\n':
          state = S_INIT;
          fp_dst.write(c);
      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();
  #os.remove(bak_file);
trim_dir(top_dir);

  需要说明的是这段程序来自:http://blog.csdn.net/codearhat/article/details/6852483#comments

但是里面有两个问题,会引起错误,现在经验证可以在我的项目中使用,但是不保证完全没有错误,有错误希望和我联系,也可以和原作者联系

目录
相关文章
|
2月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
956 2
|
2月前
|
jenkins Shell 测试技术
|
4月前
|
C++ Windows
.NET Framework安装不成功,下载`NET Framework 3.5`文件,Microsoft Visual C++
.NET Framework常见问题及解决方案汇总,涵盖缺失组件、安装失败、错误代码等,提供多种修复方法,包括全能王DLL修复工具、微软官方运行库及命令行安装等,适用于Windows系统,解决应用程序无法运行问题。
346 3
|
1月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
164 1
|
1月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
2月前
|
安全 jenkins Java
Java、Python、C++支持jenkins和SonarQube(一)
Jenkins 是一个开源的 持续集成(CI)和持续交付(CD) 工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
231 5
|
2月前
|
jenkins Java Shell
Java、Python、C++支持jenkins和SonarQube(全集)
Jenkins 是一个开源的持续集成(CI)和持续交付(CD)工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
317 1
|
2月前
|
jenkins Java 持续交付
Java、Python、C++支持Jenkins和SonarQube(三)
Python与Jenkins和SonarQube
100 1
|
2月前
|
jenkins Java 测试技术
|
3月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
154 0

推荐镜像

更多