我希望计算 .txt 文件中的行数,如下所示:
apple
orange
pear
hippo
donkey
有用于分隔块的空白行。根据上面的示例,我正在寻找的结果是五(行)。
我怎样才能做到这一点?
作为奖励,很高兴知道有多少块/段落。所以,根据上面的例子,这将是两个块。
我希望计算 .txt 文件中的行数,如下所示:
apple
orange
pear
hippo
donkey
有用于分隔块的空白行。根据上面的示例,我正在寻找的结果是五(行)。
我怎样才能做到这一点?
作为奖励,很高兴知道有多少块/段落。所以,根据上面的例子,这将是两个块。
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)。(我需要从电脑上休息一下......)
计算非空行数的一种简短方法可能是:
with open('data.txt', 'r') as f:
lines = f.readlines()
num_lines = len([l for l in lines if l.strip(' \n') != ''])
我很惊讶地看到还没有一个干净的 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()
返回空字符串时才是空行。这可能是也可能不是您对空行的定义。
sum([1 for i in open("file_name","r").readlines() if i.strip()])
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
withitertools.groupby
来计算文件中连续行/块的数量:
from itertools import groupby
no_paragraphs = sum(k for k, _ in groupby(StringIO(s), lambda x: not x.isspace()))
print(no_paragraphs)
# 2
非空行计数器:
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
这段 Python 代码应该可以解决您的问题:
with open('data.txt', 'r') as f:
lines = len(list(filter(lambda x: x.strip(), f)))
我会这样做:
f = open("file.txt")
l = [x for x in f.readlines() if x != "\n"]
print len(l)
readlines()
将列出文件中的所有行,然后您可以只取那些至少包含某些内容的行。对我来说看起来很简单!
挺直的!我相信
f = open('path','r')
count = 0
for lines in f:
if lines.strip():
count +=1
print count
我的一个班轮将是
print(sum(1 for line in open(path_to_file,'r') if line.strip()))