我希望计算.txt文件中的行数,如下所示:
apple
orange
pear
hippo
donkey
用于分隔块的空白行。基于上面的示例,我正在寻找的结果是五(行)。
我怎样才能做到这一点?
作为奖励,知道有多少块/段会很好。因此,基于上面的例子,这将是两个块。
答案 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.isspace
和itertools.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()))