#!/user/bin/env python
# @Time :2018/6/5 14:58
# @Author :PGIDYSQ
#@File :PyCheck.py
from os.path import isfile as isfile
from time import time as time Result ={}
AllLines =[]
FileName = r'C:\Users\PGIDYSQ\Desktop\fibo.py'#访问.py文件路径
'''py文件程序代码复用度检查'''
def PreOperate():
global AllLines
with open(FileName,'r',encoding='UTF-8') as fp:
for line in fp:
line =' '.join(line.split())
AllLines.append(line)
def IfHasDuplicated(Index1):
for item in Result.values():
for it in item:
if Index1 == it[0]:
return it[1]
return False
def IsInSpan(Index2):
for item in Result.values():
for i in item:
if i[0] <=Index2<i[0]+i[1]:
return True
return False
def MainCheck():
global Result
TotalLen = len(AllLines)
Index1 =0
while Index1 < TotalLen -1:
span = IfHasDuplicated(Index1)
if span:
Index1 += span
continue
Index2 = Index1 + 1
while Index2 < TotalLen:
if IsInSpan(Index2):
Index2 += 1
continue
src = ''
des = ''
for i in range(10):
if Index2 + 1>=TotalLen:
break
src += AllLines[Index1 + 1]
des += AllLines[Index2 + 1]
if src == des:
t = Result.get(Index1,[])
for tt in t:
if tt[0] == Index2:
tt[1] = i+1
break
else:
t.append([Index2,i+1])
Result[Index1] = t
else:
break
t = Result.get(Index1, [])
for tt in t:
if tt[0] == Index2:
Index2 += tt[1]
break
else:
Index2 += 1
Result[Index1] = Result.get(Index1,[])
for n in Result[Index1][::-1]:
if n[1] < 3:
Result[Index1].remove(n)
if not Result[Index1]:
del Result[Index1]
a = [ttt[1] for ttt in Result.get(Index1,[[Index1,1]])]
if a:
Index1 += max(a)
else:
Index1 += 1
def Output():
print('-'*20)
print('Result:')
for key,value in Result.items():
print('The original line is :\n{0}'.format(AllLines[key]))
print('Its line number is {0}'.format(key+1))
print('The duplicated line numbers are:')
for i in value:
print(' Start:',i[0],' Span:',i[1])
print('-'*20)
print('-'*20) if isfile(FileName):
start =time()
PreOperate()
MainCheck()
Output()
print('Time used:',time() - start)

使用python对py文件程序代码复用度检查的更多相关文章

  1. python将py文件转换为pyc

    python -m py_compile lib/ylpy.py python -m py_compile lib/ylpy.py python 一个.py文件如何调用另一个.py文件中的类和函数 A ...

  2. Python(一) 快速配置Python编译环境与第一个py文件程序

    1. Python基本语法在此不熬述. 2. 到管网下载Python 3.6.x 版本,与本机匹配的版本,如本机是 win7 64 python-3.6.5-amd64 3. 下载IDE:Python ...

  3. Python的.py文件打包成exe可执行文件

    前几天做了几个简单的爬虫python程序,于是就想做个窗口看看效果. 首先是,窗口的话,以前没怎么接触过,就先考虑用Qt制作简单的ui.这里用前面sinanews的爬虫脚本为例,制作一个获取当天sin ...

  4. Python __init__.py 文件使用

    __init__.py的主要作用是: 1. Python中package的标识,不能删除 2. 定义__all__用来模糊导入 3. 编写Python代码(不建议在__init__中写python模块 ...

  5. python的py文件打包成exe

    一.首先需要安装Pyinstaller-- 使用pip来安装模块 (我电脑上装的是python的一个编译环境Anaconda,如果电脑上装的是python自带的IDE的话,就直接进入python的安装 ...

  6. Python __init__.py文件的作用

    我们经常在python的模块目录中会看到 "__init__.py"  这个文件,那么它到底有什么作用呢? 1. 模块包(module package)标识 如果你是使用pytho ...

  7. python的py文件命名注意事项

    最近,在学习python爬虫时,用到各种库特性时,写小段代码,命名demo的py文件诸如:requests.py,json.py,csv.py.都会提示类似“module 'csv' has no a ...

  8. 将Python的.py文件转变为可执行文件.exe

    python是个很强大的工具,但我们生成的.py文件在没有Python环境下运行就需要转为.exe文件,我使用的是PyInstaller 1.安装PyInstaller: pip install Py ...

  9. uncompyle2反编译python的.py文件

    前几天学用github,一不小心把a.py文件给删除了,由于1天没有提交,也无法找回.突然发现同a.py文件生成的编译文件a.pyc还在,逐去搜索一番反编译的方法. 查询得知python比较好的工具u ...

随机推荐

  1. .NET Core微服务之ASP.NET Core on Docker

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Docker极简介绍 1.1 总体介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.D ...

  2. LogUtil【实现自由的控制日志的打印的封装类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 主要用于控制项目开发和上线阶段日志的打印. 效果图 暂不需要. 代码分析 在LogUtil类中声明代表不同日志级别的常量值(VERB ...

  3. 【转载】java final 关键字的几种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  4. SAMBA服务和FTP服务讲解(week3_day1)--技术流ken

    samba服务 Smb主要作为网络通信协议; Smb是基于cs架构: 完成Linux与windows之间的共享:linux与linux之间共享用NFS 第一步:安装samba [root@ken ~] ...

  5. keil教程之新建软件工程

    前言 工欲善其事,必先利其器.要学好52单片机,就要会用keil写程序.不然,谈何学习单片机.下面介绍keil的使用. keil简介 Keil C51是美国Keil Software公司出品的51系列 ...

  6. [JavaScript] Cookie,localStorage,sessionStorage概述

    Cookie Cookie 是一些数据, 存储于你电脑上的文本文件中,当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息.Cookie 的作用就是存储 web 页面 ...

  7. pm2通过配置文件部署nodejs代码到服务器

    一.pm2文档地址: http://pm2.keymetrics.io/ 二.在本地项目下新建ecosystem.config.js文件,并且推送到远端(记得node_modules这个文件夹也得推送 ...

  8. java_IO流

    IO流概述及分类 Reader  InputStream  OutputStream  Writer都是Object的直接子类 字节流: 字节输入流 InputStream(抽象类) |---File ...

  9. Lucene配置步骤详解

    Lucene配置步骤说明: 1.搭建环境: 2.创建索引库: 3搜索索引库. Lucene配置步骤: 第一部分:搭建环境(创建环境导入jar包) 前提:已经创建好了数据库(直接导入book.sql文件 ...

  10. Eclipse导出包含第三方Jar的工程

    基于第三方开源的Jar包封装了一个工具类,在导出成Jar包后,引用新生成的Jar包,却报找不到类的错误.看了一下生成的Jar包,发现根本没有包含第三方Jar包的相关class.这是导出第三方Jar包时 ...