如果我有一个带有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)
答案 0 :(得分:2)
在外壳中使用grep
和wc
:
grep -vE '^[[:space:]]*#|^$' test.py | wc -l
这将得到8
。
^[[:space:]]*#
的开头,[[:space:]]
将匹配零个或多个空格(#
),后跟^
。^$
匹配行^
的开头,然后匹配行$
的结尾|
是一个或运算符,如果满足任一表达式则匹配-E
的{{1}}选项启用扩展的正则表达式grep
的{{1}}选项可逆转匹配,即返回不不匹配模式的行-v
计算文件或流中换行符,单词或字节的数量,grep
选项仅返回(新)行数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