计算python中非空行和长度的总和
我试图创建一个函数,它接受一个文件名并返回一个2元组,并且该程序中的非空行数,所有这些线的长度。这是我目前的计划:计算python中非空行和长度的总和
if __name__=="__main__":
print(code_metric('cmtest.py'))
是
(3, 0)
当它应该是::如果我做
def code_metric(file):
with open(file, 'r') as f:
lines = len(list(filter(lambda x: x.strip(), f)))
num_chars = sum(map(lambda l: len(re.sub('\s', '', l)), f))
return(lines, num_chars)
结果我得到的是得到
(3,85)
还有找到长度总和的更好方法线使用功能图,过滤和减少?我做了第一部分,但无法弄清楚下半场。 AM有点新的Python,所以任何帮助将是伟大的。
下面是测试文件名为cmtest.py:
import prompt,math
x = prompt.for_int('Enter x')
print(x,'!=',math.factorial(x),sep='')
First line has 18 characters (including white space)
Second line has 29 characters
Third line has 38 characters
[(1, 18), (1, 29), (1, 38)]
的行数为85个字符,包括空格。我很抱歉,我错读了这个问题。每行的总长度也应该包括空格。
一个相当简单的方法是建立一个发电机剥离后的空白,然后enumerate
过该(以1:1的起始值)filter
荷兰国际集团出空行,和求和反过来每一行的长度,例如:
def code_metric(filename):
line_count = char_count = 0
with open(filename) as fin:
stripped = (line.rstrip() for line in fin)
for line_count, line in enumerate(filter(None, stripped), 1):
char_count += len(line)
return line_count, char_count
print(code_metric('cmtest.py'))
# (3, 85)
为了计算行,也许这个代码是清洁:
with open(file) as f:
lines = len(file.readlines())
对于您方案的第二部分,如果你打算只计算非空字符,然后你忘了删除“\ t '和'\ n'。如果是这种情况
with open(file) as f:
num_chars = len(re.sub('\s', '', f.read()))
有人建议你在一个循环中完成这两件事。这很好,但是如果让它们分开,你可以使它们变成不同的功能,并且以这种方式具有更多的可重用性。除非你正在处理大文件(或者执行这个代码数百万次),否则就性能而言应该没有关系。
如果我使用'开放(文件)为f:。 NUM_CHARS = SUM(地图(拉姆达l:len(re.sub('\ s','' ,l)),f))'我得到'(3,0)'而不是'(3,85)' – BoJaNgLeS 2015-02-08 00:30:52
你的线路是怎样的?我有一个带'''''abc d'e'''和''''''''''的文件。运行后,我得到'''num_chars'''等于10. – 2015-02-08 00:36:07
Almeda-在问题中有一个测试文件。这是正在测试的文件,并且线条看起来完全如示例中所示。 – BoJaNgLeS 2015-02-08 00:38:49
你确定当你计算你没有计算行中空格的字符数吗? – Aradmey 2015-02-07 22:56:46
您正在做两次迭代(每次打开文件并循环播放) - 如果要提高效率,为什么不将两个操作合并到一个迭代中? – alfasin 2015-02-07 22:59:40
@ Aradmey-我很确定。它只有1。这就是为什么我似乎无法弄清楚为什么?我 – BoJaNgLeS 2015-02-07 23:49:06