本文實(shí)例講述了Python刪除Java源文件中全部注釋的實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
同事想刪除一個(gè)Java項(xiàng)目中的全部注釋,讓我?guī)兔ο胂朕k法。
沒找不到合適工具,就寫了這個(gè)腳本,遍歷指定目錄,查找*.java文件,刪除其中/* */之間,及// 至行末的內(nèi)容。
(用之前要改改其中的路徑):
#!D:/Python32# 過濾JAVA程序中的注釋# 如果字符串中有注釋符號(hào)的話會(huì)有問題。import osimport reimport io# 改這個(gè)目錄!!!top_dir = "E://java_comments_trim//";# 狀態(tài)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: # 這里未完全實(shí)現(xiàn)全部序列,如/oNNN /xHH /u1234 /U12345678,但沒影響 state = S_STR; fp_dst.write(c); fp_src.close(); fp_dst.close();trim_dir(top_dir);希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選