import re def delComment(filePath): sourcefile=open(filePath) purefile=open(r"C:\Users\noook\Desktop\purefile.py",'w')#位置改成自己想要的,比如"C:\Users\noook\Desktop\1.py" sourcelines=sourcefile.readlines() for line in sourcelines: if not re.match(r' *#', line): #pattern中第一个是空格,第二个是星号,第三个是注释符 purefile.write(line) purefile.close()
目前先删掉单独成行的注释,那些与运行代码同行的注释等一下再补上。
删除与运行代码同行的注释,主要难点在于,如果只是把每一行中的‘#’及其后面的字符全删掉,就如上面的代码中
“if not re.match(r' *#', line): #pattern中第一个是空格,第二个是星号,第三个是注释符” ,
此行有两个#,第一个被前面的“ r ” 转义成普通字符了,即不带注释功能了,如果把它后面的全删掉,肯定是不行的。
问题来了,需要找出一个方法判断每一个#是普通字符还是注释符。
如果看它前面是否有r,或者r',或者(r',或者(r,都是不准确的,r可以跟其它很多字符搭配组成匹配式。
如果看#的两边是否有引号,遗憾的是,英文的引号虽然也是成对的,但不管是单引号还是双引号,一对英文引号的左引号和右引号是同一个字符。