我有多少行无注释代码?

时间:2019-02-15 23:00:11

标签: python

如果我有一个带有X行的python文件,但是Y行仅被注释占据,Z行只是空白,我如何找到N,N = X-Y-Z?

这是我尝试过的。这是我的示例代码;

#This is a function to find prime numbers...
#..., it's taken from https://stackoverflow.com/questions/14656473/python-beginners-loop-finding-primes

primes_in_a_list = []
for p in range(2, 100):
    for i in range(2, p):
        if p % i == 0:
            break
    else:
        primes_in_a_list.append(p)

print (primes_in_a_list)

在上面的示例中有12行,我想运行另一个输出8的.py-file / script。使用下面的代码,我得到10作为答案。

x, y, z = 0, 0, 0

with open('test.py') as f:
    content = f.readlines()

content = [x.strip() for x in content]
for line in content:
    theline = line[2:]
    x += 1
    if theline.startswith('#'):
        y += 1
    if not theline:
        z += 1
n = x-y-z

print (n)

2 个答案:

答案 0 :(得分:2)

在外壳中使用grepwc

grep -vE '^[[:space:]]*#|^$' test.py | wc -l

这将得到8

    在行^[[:space:]]*#的开头,
  • [[:space:]]将匹配零个或多个空格(#),后跟^
  • ^$匹配行^的开头,然后匹配行$的结尾
  • |是一个或运算符,如果满足任一表达式则匹配
  • -E的{​​{1}}选项启用扩展的正则表达式
  • grep的{​​{1}}选项可逆转匹配,即返回不匹配模式的行
  • -v计算文件或流中换行符,单词或字节的数量,grep选项仅返回(新)行数
  • shell中的wc将左命令的(标准)输出传递到右命令的(标准输入)。

匹配多行注释更加困难,因为您需要找到两个标记之间的行。使用-l可能是可行的,但是我现在不太确定该怎么做。

答案 1 :(得分:1)

with仅打开文件;它不会遍历其内容。

如果您想阅读第一行以外的内容,请在其中添加循环 ,如下所示:

with open('test.py') as f:
    for line in f.readline()
        x += 1
        if line.startswith('#'):
            y += 1
        if line.startswith('\n') or line.startswith('\r\n'):
            z += 1