使用Python计算文本文件中的行数,不包括空行

时间:2012-05-20 12:51:08

标签: python

我希望计算.txt文件中的行数,如下所示:

apple
orange
pear

hippo
donkey

用于分隔块的空白行。基于上面的示例,我正在寻找的结果是五(行)。

我怎样才能做到这一点?

作为奖励,知道有多少块/段会很好。因此,基于上面的例子,这将是两个块。

10 个答案:

答案 0 :(得分:19)

non_blank_count = 0

with open('data.txt') as infp:
    for line in infp:
       if line.strip():
          non_blank_count += 1

print 'number of non-blank lines found %d' % non_blank_count

更新:重新阅读问题,OP想要计算非空白行..(叹息...感谢@RanRag)。 (我需要从电脑上休息一下......)

答案 1 :(得分:3)

计算非空白行数的简短方法可能是:

with open('data.txt', 'r') as f:
    lines = f.readlines()
    num_lines = len([l for l in lines if l.strip(' \n') != ''])

答案 2 :(得分:1)

sum([1 for i in open("file_name","r").readlines() if i.strip()])

答案 3 :(得分:1)

考虑到空白行只包含新的行字符,避免调用创建新字符串的str.strip会更快,而是检查该行是否仅包含使用str.isspace的空格和然后跳过它:

with open('data.txt') as f:
    non_blank_lines = sum(not line.isspace() for line in f)

演示:

from io import StringIO

s = '''apple
orange
pear

hippo
donkey'''

non_blank_lines = sum(not line.isspace() for line in StringIO(s)))
# 5

您可以进一步使用str.isspaceitertools.groupby来计算文件中连续行/块的数量:

from itertools import groupby

no_paragraphs = sum(k for k, _ in groupby(StringIO(s), lambda x: not x.isspace()))
print(no_paragraphs)
# 2

答案 4 :(得分:0)

非空行计数器:

lines_counter = 0

with open ('test_file.txt') as f:
    for line in f:
        if line != '\n':
            lines_counter += 1

阻止计数器:

para_counter = 0
prev = '\n'

with open ('test_file.txt') as f:
    for line in f:
        if line != '\n' and prev == '\n':
            para_counter += 1
        prev = line

答案 5 :(得分:0)

这段Python代码应该可以解决您的问题:

with open('data.txt', 'r') as f: 
    lines = len(list(filter(lambda x: x.strip(), f)))

答案 6 :(得分:0)

我就是这样做的:

f = open("file.txt")
l = [x for x in f.readlines() if x != "\n"]

print len(l)

readlines()将列出文件中的所有行,然后您可以获取至少包含其中某些内容的行。 看起来很简单!

答案 7 :(得分:0)

挺直的!我相信

f = open('path','r')
count = 0
for lines in f:
    if lines.strip():
        count +=1
print count

答案 8 :(得分:0)

我很惊讶地看到还没有一个明确的pythonic答案(截至2019年1月1日)。许多其他答案会创建不必要的列表,以非pythonic方式计数,以非pythonic方式循环遍历文件的行,未正确关闭文件,执行不必要的操作,假定行末字符可以只能是'\n',或有其他较小的问题。

这是我建议的解决方案:

with open('myfile.txt') as f:
    line_count = sum(1 for line in f if line.strip())

该问题并未定义空白行。 我对空行的定义line仅当line.strip()返回空字符串时才是空行。这可能是您的空白行定义,也可能不是。

答案 9 :(得分:0)

我的一支班轮是

print(sum(1 for line in open(path_to_file,'r') if line.strip()))