12

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

apple
orange
pear

hippo
donkey

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

我怎样才能做到这一点?

作为奖励,很高兴知道有多少块/段落。所以,根据上面的例子,这将是两个块。

4

10 回答 10

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)。(我需要从电脑上休息一下......)

于 2012-05-20T12:53:00.147 回答
3

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

with open('data.txt', 'r') as f:
    lines = f.readlines()
    num_lines = len([l for l in lines if l.strip(' \n') != ''])
于 2012-05-20T13:09:37.820 回答
3

我很惊讶地看到还没有一个干净的 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()返回空字符串时才是空行。这可能是也可能不是您对空行的定义。

于 2019-01-01T15:22:46.917 回答
2
sum([1 for i in open("file_name","r").readlines() if i.strip()])
于 2016-03-28T02:43:31.747 回答
2

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.isspacewithitertools.groupby来计算文件中连续行/块的数量:

from itertools import groupby

no_paragraphs = sum(k for k, _ in groupby(StringIO(s), lambda x: not x.isspace()))
print(no_paragraphs)
# 2
于 2017-08-13T16:45:29.417 回答
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
于 2012-05-20T13:15:49.380 回答
0

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

with open('data.txt', 'r') as f: 
    lines = len(list(filter(lambda x: x.strip(), f)))
于 2012-05-20T14:51:21.470 回答
0

我会这样做:

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

print len(l)

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

于 2013-09-04T19:11:28.333 回答
0

挺直的!我相信

f = open('path','r')
count = 0
for lines in f:
    if lines.strip():
        count +=1
print count
于 2014-02-26T12:43:26.810 回答
0

我的一个班轮将是

print(sum(1 for line in open(path_to_file,'r') if line.strip()))
于 2020-06-03T13:45:29.400 回答