Pycharm每天都要写很多代码,如何统计每天的代码行数呢?作为一个目标十万行的coder,要想想办法!

题目:有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。

首先分析一下思路捋一下大象装冰箱的步骤,从一个给定的目录统计该目录下所有的代码行大致需要以下7个步骤:

1. 遍历该目录下所有的文件。

2. 判断文件是否以“.py”结尾。(以python代码为例)

3. 打开.py文件(切忌勿用W+,W+会清空文件内容)

4. 循环读取文件的每一行

5. 判断每一行的内容:

(a) 注释: 以#开头。

(b) 注释:以三引号开头结束。

(c) 空行:除空白字符无其他。

(d) 代码行:除空白字符之后还剩下其他字符。

6. 判断是否为文件末尾,

7. 关闭文件, 返回结果.

解题思路捋清楚之后剩下的就是将各模块的代码像搭积木一样搭起来就完事了(示例代码在本文最后):

1: 导入OS,定义 code_lines_count 函数并接收一个 path 形式参数,声明了三个变量分别用于统计代码行,注释行和空行

2: 遍历os.walk获取到的file 对象,然后将文件的后缀名利用splitext函数分割然后使用列表索引 [1] 取得文件后缀名,并判断是否是以“.py”结尾。(此处也可以使用listdir, 但listdir只能取单层目录下的文件, 并且需要单独判断取得的元素是文件还是文件夹,较麻烦)

3:   定义了一个file_abs_path的变量并赋值文件的绝对路径,是因为下面的代码会多次使用,不必每次都使用so.path.join(xx,xx)。

4:对于上一个步骤获取到的以“.py”结尾的文件 利用with 方式打开(使用with可省去关闭文件的代码),对于打开的文件使用While True 循环的使用readline()去读取文件的每一行并赋值给line 变量。

5:该段代码用于对上一步骤readline()取得的行做判断是 代码行,空行还是注释行。

a:如果line为空,表示取到文件末尾,此时break while 循环,继续files 中的下一个文件操作。

b:使用strip()对readline()取得的行做去空白处理,如果经过处理后是以“#”开头则表示这行是一个注释行 此时对comm_lines 做加1 操作。

c:使用strip()对readline()取得的行做去空白处理,如果经过处理后是以三个单引号或者三个双引号开头则表示此处为一个多行注释的开始,然后判断该行的三引号数量如果为1则表示注释分多行, 否则注释为一行(一对三引号在同一行),对于注释为多行情况使用while 循环得读取接下来的行,并且没读一行对 comm_lines 做加1 操作,如果读到某一行存在三引号则判定注释结束,break 当层while循环(此处只考虑了比较规范的注释)

d:如果读到的行做过strip()之后非空且不是注释,则是一个代码行, 并对code_lines做加1操作。

e:如果上述条件都不满足,则判断为一个空行,并对space_lines 做加1操作。

6:返回统计到的代码行,注释行和空行。

7:测试代码下图是运行的一个实例

import os

def code_lines_count(path):
code_lines = 0
comm_lines = 0
space_lines = 0
for root,dirs,files in os.walk(path):
for item in files:
file_abs_path = os.path.join(root,item)
postfix = os.path.splitext(file_abs_path)[1]
if postfix == '.py': with open(file_abs_path) as fp:
while True:
line = fp.readline()
if not line: break
elif line.strip().startswith('#'): comm_lines += 1
elif line.strip().startswith("'''") or line.strip().startswith('"""'):
comm_lines += 1
if line.count('"""') ==1 or line.count("'''") ==1:
while True:
line = fp.readline() comm_lines += 1
if ("'''" in line) or ('"""' in line):
break
elif line.strip(): code_lines += 1
else: space_lines +=1 return code_lines,comm_lines,space_lines if __name__ == '__main__':
abs_dir = os.getcwd()
x,y,z = code_lines_count(abs_dir)
print(x,y,z)

参考

Python入门之用Python统计代码行的更多相关文章

  1. Python 统计代码行

    正在学习 Python, 做了个统计代码行的功能, 参考了网上很多前辈的帖子,添加了感觉还是比较实用的功能, 只是windows下测试了,而且代码文件编码形式是 utf-8的. 如果使用其它编码形式的 ...

  2. 利用python统计代码行

    参加光荣之路测试开发班已三月有余,吴总上课也总问“ 咱们的课上了这么多次了大家实践了多少行代码了?”.这里是一个一脸懵逼的表情.该怎么统计呢?一个个文件数当然不可取,能用代码解决的事咱们坚决不动手.最 ...

  3. python统计代码行数

    以前写了一个java的统计代码行数的小程序,最近在看python,于是就参考前辈的代码,写了一个统计文件夹下面各种程序的代码的小程序,这里贴出来供大家参考 参考链接: https://gist.git ...

  4. Eclipse统计代码行数

    开发过程中,经常需要统计代码行数,这时可以通过Eclipse的Search功能来实现. 步骤: 1.在Package Explorer中选中需要统计的包: 2.单击菜单Search-->File ...

  5. 在Flash Builder或者Eclipse统计代码行数的方法

    在Flash  Builder或者Eclipse统计代码行数的方法如下图菜单栏--搜索--搜索文件

  6. 【Linux】常用命令-统计代码行数

    公司人员流动大,经常有新的维护任务,交接时喜欢看看新来的模块的代码量,那么问题来了, 如何统计代码行数? 1,最先想到的肯定是 wc. wc -l *.h 将查看[当前目录]下头文件的代码行数,输出结 ...

  7. c#统计代码行数

    小编,已经快学了两年编程了.昨天突发奇想,想统计下这些年到底写过多少行代码,于是做了一个这个小程序来统计代码行数.老规矩,先上图. 比较惭愧,写了两年只有2万多行.那我们还是进入下一项吧. 界面搭建我 ...

  8. 如何安装Pycharm官方统计代码行插件

    最近一直想统计Pycharm的总计代码行数,找到了官方的统计行数插件,发现效果还不错. 官方代码统计插件指导: https://plugins.jetbrains.com/plugin/4509-st ...

  9. 【未解决】对于使用Windows的IDEA进行编译的文件,但无法在Linux系统中统计代码行数的疑问

    在我学习使用Windows的IDEA的过程中,将代码文件转移到Linux虚拟机当中,但无法在Linux系统中统计代码行数. 注意:拷贝进虚拟机的文件均能编译运行. 具体过程如下: root@yogil ...

随机推荐

  1. 不同修饰符使用细节(java)

    常用来修饰类.方法.变量的修饰符如下 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权限修饰符,默认访 ...

  2. Anaconda中配置Pyspark的Spark开发环境

    1.windows下载并安装Anaconda集成环境 URL:https://www.continuum.io/downloads 2.在控制台中测试ipython是否启动正常 3.安装JDK 3.1 ...

  3. ZOJ 4029 - Now Loading!!! - [前缀和+二分]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4029 Time Limit: 1 Second Memory L ...

  4. Hadoop Single Node Setup(hadoop本地模式和伪分布式模式安装-官方文档翻译 2.7.3)

    Purpose(目标) This document describes how to set up and configure a single-node Hadoop installation so ...

  5. Docker处理日志的方法&日志收集工具比较

    测试logstash:docker run -it mylogstash:0.1.0 logstash -e 'input{stdin{}}output{stdout{codec=>rubyde ...

  6. ECharts修改坐标轴,坐标轴字体,坐标轴网格样式以及控制坐标轴是否显示

    转自:http://blog.csdn.net/kirinlau/article/details/72876689 首先要将一个图表显示在前端页面上: var myChart = echarts.in ...

  7. WebDriver 常用操作

    1 浏览器操作 2 窗口和弹框操作 3 cookies 操作 4 简单对象的定位 5 页面元素操作 6 鼠标事件 7 键盘事件 1 浏览器操作 #属性: driver.current_url #用于获 ...

  8. 【F12】谷歌浏览器F12前端调试工具 Console

    谷歌浏览器F12前端调试工具 Console 前言 先上图:不知道有多少人发现,在浏览器开发工具的“Console”上的百度首页的关于百度招聘的信息: 今天要给大家介绍的就是是Web前端调试工具中的C ...

  9. dedecms后台每页文章条数如何修改(“文档列表”每一页显示的文档条数)

    小明在学习采集,弄了个dedecms作为发布平台,几个小时后跑来报喜说好简单,但又不想制造那么多spam,每个分类只保留几条就好.在后台删除这些文章,每页只显示30个,看了下有100多页,立马沮丧了, ...

  10. spring boot集成shrio用于权限控制

    下面是一个简单的springBoot集成shrio的项目,技术是:spring boot+idea+gradle+shrio+mybatis 1:首先在build.gradle中导入依赖 builds ...