Python_检查程序规范
'''
检查Python程序的一些基本规范,例如,运算符两测是否有空格,是否每次只导入一个模块,在不同的功能模块之间是否有空行,注释是否够多,等等
'''
import sys
import re def checkFormats(lines,desFileName):
fp=open(desFileName,'w')
for i, line in enumerate(lines):
print('='*30)
print('Line:',i+1)
if line.strip().startwith('#'):
print(' '*10+'Comments.Pass.')
fp.write(line)
continue
flag=True
#check operator symbols
symbols=[',','+','-','*','/','//','**','>>','<<','+=','-=','*=','/=']
temp_line=line
for symbol in symbols:
pattern=re.compile(r'\s*'+re.escape(symbol)+r'\s*')
temp_lie=pattern.split(temp_line)
sep=' '+symbol+' '
temp_line=sep.join(temp_line)
if line !=temp_line:
flag=False
print(' '*10+'You may miss some blank spaces in this line.' )
#check import statement
if line.strip().startwith('import'):
if ',' in line:
flag = False
print(' '*10+"You'd bbetter import one module at a time.")
temp_line=line.strip()
modules=modules.strip()
pattern=re.compile(r'\s*,\s*')
modules=pattern.split(modules)
temp_line=''
for module in modules:
temp_line +=line[:line.index('import')] + 'import '+module+'\n'
line=temp_line
pri_line=lines[i-1].strip()
if pri_line and(not pri_line.startwith('import'))and (not pri_line.startwith('#')):
falg=False
print(' '*10+'You should add a blank line before this line.')
line='\n'+line
after_line=lines[i+1].strip()
if after_line and(not after_line.startwith('import')):
flag=False
print(' '*10+'You should add a blank line after this line.')
line=line+'\n'
#check if there is a blank line before new funtional code block
#including the class/function definition
if line.strip() and not line.startswith(' ')and i>0:
pri_line=lines[i-1]
if pri_line.strip() and pri_line.startwith(' '):
flag=False
print(' '*10 +"You'd better add a blank line before this line.")
line='\n'+line
if flag:
print(' '*10+'Pass.')
fp.write(line)
fp.close() if __name__ == '__main__':
fileName=sys.argv[1] #命令行参数
fileLines=[]
with open(fileName,'r') as fp:
fileLines=fp.readline()
desFileName=fileName[:-3]+'_new.py'
checkFormats(fileLines,desFileName)
#check the ratio of comment lines to all lines
comments=[line for line in fileLines if line.strip().startswith('#')]
ratio=len(comments)/len(fileLines)
if ratio <= 0.3:
print('='*30)
print('Comments in the file is less than 30%')
print('Perhaps you should add some comments at appropriate position.')
Python_检查程序规范的更多相关文章
- python_开发规范
对于python有哪些开发规范? 1. 每行代码不超过80字符 2. 不要在逗号, 分号, 冒号前加空格, 应该之后加空格 3. 列表, 索引,切片的左括号前不加空格 4. 比较运算前后 加一个空格 ...
- python_编程规范
缩进 4个"空格"作为一个缩进层次,永远不要使用"制表位" 空格 运算符两边放置一个空格 命名 模块名:模块应该是不含下画线的.简短的.小写的名字. 类名: ...
- Discuz! 的编码规范
http://open.discuz.net/?ac=document&page=dev_coderule 前言 本规范由编程原则组成,融合并提炼了开发人员长时间积累下来的成熟经验,意在帮助形 ...
- 中兴软件编程规范C/C++
Q/ZX 深圳市中兴通讯股份有限公司企业标准 (设计技术标准) Q/ZX 04.302.1–2003 软件编程规范C/C++ 20 ...
- (转)C++ 编程规范
转载地址:http://www.cnblogs.com/len3d/archive/2008/02/01/1061902.html C/C++编码规范 今天人们越来越明白软件设计更多地是一种工程,而不 ...
- Java初认识--Java语言的书写规范及基本的运算符
一.Java中名称的规范和书写程序的规范. 1.Java中的名称规范: (1)包名全是小写:xxyyzz: (2)类名接口名:首字母大写:XxxYyy: (3)变量名和函数名:变量名不能是关键字:多单 ...
- C语言编程规范
C语言编程规范 6 函数与过程 6.1 函数的功能与规模设计 函数应当短而精美,而且只做一件事.不要设计多用途面面俱到的函数,多功能集于一身的函数,很可能使函数的理解.测试.维护等变得困难. 6.2 ...
- C/C++编码规范
C/C++编码规范 今天人们越来越明白软件设计更多地是一种工程,而不是一种个人艺术.由于大型产品的开发通常由很多的人协同作战,如果不统一编程规范,最终合到一起的程序,其可读性将较差,这不仅给代码的理解 ...
- Discuz代码研究-编码规范
Discuz中的编码规范很值得PHP开发人员借鉴.里面既介绍了编码时代码标记,注释,书写规则,命名原则等方面基础的内容,对代码的安全性,性能,兼容性,代码重用,数据库设计,数据库性能及优化作了阐述,这 ...
随机推荐
- [查阅]Dalvik opcodes
Dalvik opcodes Dalvik opcodes Author: Gabor Paller Vx values in the table denote a Dalvik register. ...
- 【一天一道LeetCode】#25. Reverse Nodes in k-Group
一天一道LeetCode系列 (一)题目 Given a linked list, reverse the nodes of a linked list k at a time and return ...
- Linux 打开句柄限制的调整
Linux 打开句柄限制的调整 参考文章: Linux---进程句柄限制总结(http://blog.csdn.net/jhcsdb/article/details/32338953) !! 本文内容 ...
- centos下安装mysql(安装,启动,停止,服务端口查询,用户密码设定)
http://www.2cto.com/database/201305/208114.html http://smilemonkey.iteye.com/blog/673848 netstat -na ...
- Android驱动中的Kconfig文件与Makefile文件
内核源码树的目录下都有两个文档Kconfig(2.4版本是Config.in)和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文 ...
- BI过程简述
BI流程: 需求分析->维度设计->查询service->ETL倒数据->CDC监听数据库 需求分析:首先确定好的数据来源(多个数据库+excel文件+日志+...),需要的数 ...
- Android实训案例(一)——计算器的运算逻辑
Android实训案例(一)--计算器的运算逻辑 应一个朋友的邀请,叫我写一个计算器,开始觉得,就一个计算器嘛,很简单的,但是写着写着发现自己写出来的逻辑真不严谨,于是搜索了一下,看到mk(没有打广告 ...
- Spring 官网下载zip jar
第一步:打开官网:http://www.springsource.org/download/community: 第二步:点击图片 第三步:点击图标 第四步:找到如下链接,点击进去 第五步:再找到如下 ...
- SharePoint 开发TimerJob 介绍
项目需要写TimerJob,以前也大概知道原理,不过,开发过程中,还是遇到一些问题,网上看了好多博客,也有写的灰常好的,不过,自己还是想再写一下,也算是给自己一个总结,也算给大家多一个参考吧. Tim ...
- Android的Binder的起源-android学习之旅(100)
George Hoffman任职1991年Be公司的工程师,他启动了一个"openBinder"的项目,该项目的宗旨是研究一个高效的信号传递工具,允许多个软件相互合作,构成一个软件 ...