本文實例講述了Python刪除Java源文件中全部注釋的實現方法。分享給大家供大家參考,具體如下:
同事想刪除一個Java項目中的全部注釋,讓我幫忙想想辦法。
沒找不到合適工具,就寫了這個腳本,遍歷指定目錄,查找*.java文件,刪除其中/* */之間,及// 至行末的內容。
(用之前要改改其中的路徑):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#!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程序設計有所幫助。
原文鏈接:http://blog.csdn.net/codearhat/article/details/6852483