python删除源文件中的注释并编译详解编程语言

上线需要,将py的源码中注释删掉,然后编译成字节码。写此脚本主要是为了删除注释。当然如果上线不想放py源码,则在最后增加删除源码即可。

#!/bin/env python 
# -*- coding:utf-8 -*- 
# ------------------------------- 
# Filename:    
# Revision: 
# Date:        2012-12-3 
# Author:      simonzhang 
# Email:       [email protected] 
# Web:         www.simonzhang.net 
# ------------------------------- 
import os 
import re 
import sys 
import shutil 
import compileall 
  
  
def delete_Notes(py_file): 
    # 原始文件只读打开,处理文件追加打开 
    _tmp_sr_file = open(py_file, "rb").readlines() 
    _tmp_de_file = open("%s.swp" % py_file, "ab") 
    _skip_status = 0 
    _now_line = 0 
    _multi_count = 0 
    # 循环处理 
    for line in _tmp_sr_file: 
        # 跳过前10行,因为我的开头注释有10行 
        if _now_line > 10: 
            # 获取开头一位和三位 
            try: 
                _single_row_notes = line.strip()[0] 
            except: 
                _single_row_notes = "" 
            try: 
                _multi_row_notes = line.strip()[0:3] 
            except: 
                _multi_row_notes = "" 
            # 获取行是否为注释 
            if _single_row_notes == "#": 
                _skip_status = 1 
            elif _multi_row_notes == "'''": 
                if _multi_count == 0: 
                    _skip_status = 1 
                    _multi_count = 1 
                else: 
                    _skip_status = 1 
                    _multi_count = 0 
            elif _multi_count == 1: 
                _skip_status = 1 
            else: 
                _skip_status = 0 
        else: 
            _skip_status = 0 
        # 判断是否跳过写入 
        if _skip_status == 0: 
            _tmp_de_file.write(line) 
        _now_line += 1 
    _tmp_de_file.close() 
    # 处理完毕将临时文件处理为原始文件 
    shutil.move("%s.swp" % py_file, py_file) 
          
  
def main(): 
    _get_src_path = sys.argv[1] 
    _get_dec_path = sys.argv[2] 
    if os.path.exists(_get_src_path): 
        # 拷贝原始文件夹 
        shutil.copytree(_get_src_path, _get_dec_path) 
        # 删除原始文件中的注释 
        find_py_file = re.compile(r"^.*/.py$") 
        find_walk = os.walk(_get_dec_path) 
        for path,dirs,files in find_walk: 
            for f in files: 
                if find_py_file.search(f): 
                    delete_Notes("%s/%s" % (path, f)) 
        # 编译成字节码 
        compileall.compile_dir(_get_dec_path) 
    else: 
        print "Path Error!" 
  
if __name__ == "__main__": 
    main()

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/8305.html

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论