• Python_检查程序规范


     1 '''
     2     检查Python程序的一些基本规范,例如,运算符两测是否有空格,是否每次只导入一个模块,在不同的功能模块之间是否有空行,注释是否够多,等等
     3 '''
     4 import sys
     5 import re
     6 
     7 def checkFormats(lines,desFileName):
     8     fp=open(desFileName,'w')
     9     for i, line in enumerate(lines):
    10         print('='*30)
    11         print('Line:',i+1)
    12         if line.strip().startwith('#'):
    13             print(' '*10+'Comments.Pass.')
    14             fp.write(line)
    15             continue
    16         flag=True
    17         #check operator symbols
    18         symbols=[',','+','-','*','/','//','**','>>','<<','+=','-=','*=','/=']
    19         temp_line=line
    20         for symbol in symbols:
    21             pattern=re.compile(r's*'+re.escape(symbol)+r's*')
    22             temp_lie=pattern.split(temp_line)
    23             sep=' '+symbol+' '
    24             temp_line=sep.join(temp_line)
    25         if line !=temp_line:
    26             flag=False
    27             print(' '*10+'You may miss some blank spaces in this line.' )
    28         #check import statement
    29         if line.strip().startwith('import'):
    30             if ',' in line:
    31                 flag = False
    32                 print(' '*10+"You'd bbetter import one module at a time.")
    33                 temp_line=line.strip()
    34                 modules=modules.strip()
    35                 pattern=re.compile(r's*,s*')
    36                 modules=pattern.split(modules)
    37                 temp_line=''
    38                 for module in modules:
    39                     temp_line +=line[:line.index('import')] + 'import '+module+'
    '
    40                 line=temp_line
    41             pri_line=lines[i-1].strip()
    42             if pri_line and(not pri_line.startwith('import'))and (not pri_line.startwith('#')):
    43                 falg=False
    44                 print(' '*10+'You should add a blank line before this line.')
    45                 line='
    '+line
    46             after_line=lines[i+1].strip()
    47             if after_line and(not after_line.startwith('import')):
    48                 flag=False
    49                 print(' '*10+'You should add a blank line after this line.')
    50                 line=line+'
    '
    51         #check if there is a blank line before new funtional code block
    52         #including the class/function definition
    53             if line.strip() and not line.startswith(' ')and i>0:
    54                 pri_line=lines[i-1]
    55                 if pri_line.strip() and pri_line.startwith(' '):
    56                     flag=False
    57                     print(' '*10 +"You'd better add a blank line before this line.")
    58                     line='
    '+line
    59             if flag:
    60                 print(' '*10+'Pass.')
    61             fp.write(line)
    62     fp.close()
    63 
    64 if __name__ == '__main__':
    65     fileName=sys.argv[1]    #命令行参数
    66     fileLines=[]
    67     with open(fileName,'r') as fp:
    68         fileLines=fp.readline()
    69     desFileName=fileName[:-3]+'_new.py'
    70     checkFormats(fileLines,desFileName)
    71     #check the ratio of comment lines to all lines
    72     comments=[line for line in fileLines if line.strip().startswith('#')]
    73     ratio=len(comments)/len(fileLines)
    74     if ratio <= 0.3:
    75         print('='*30)
    76         print('Comments in the file is less than 30%')
    77         print('Perhaps you should add some comments at appropriate position.')
  • 相关阅读:
    每天学点Linux-选取命令CUT和GREP
    每天学点Linux-切割命令split
    基于netty-socketio的web推送服务
    Redis学习-LUA脚本
    spring中InitializingBean接口使用理解
    外包采用Gradle生成多套app打包
    Android Studio 快捷键 for mac
    使用ClipboardUtils兼容API LEVEL 11以下实现复杂粘贴
    finished with non-zero exit 添加v7包报错的问题
    Infer初体验 for Android
  • 原文地址:https://www.cnblogs.com/cmnz/p/6973417.html
Copyright © 2020-2023  润新知