Python-计算文本文件中的空行数
假设我有一个包含以下内容的文件(每个偶数行都是空的):Python-计算文本文件中的空行数,python,file,lines,Python,File,Lines,假设我有一个包含以下内容的文件(每个偶数行都是空的): 第1行第2行第3行 我尝试用两种方式读取该文件: count = 0 for line in open("myfile.txt"): if line == '': #or if len(line) == 0 count += 1 和 count = 0 file = open('myfile.txt') lines = file.readlines() for line in line
第1行
第2行
第3行
我尝试用两种方式读取该文件:
count = 0
for line in open("myfile.txt"):
if line == '': #or if len(line) == 0
count += 1
和count = 0
file = open('myfile.txt')
lines = file.readlines()
for line in lines:
if line == '': #or if len(line) == 0
count += 1
但是
count
始终保持为0。如何计算空行数?当您使用readlines()
函数时,它不会自动为您删除下线字符。因此,你可以将其与行尾进行比较,比如:
if line == os.linesep:
count += 1
if line == '\n' or line == '\r' or line == '\r\n':
count += 1
(当然,您必须导入os
模块),或者您删除这一行(正如@khelwood对您的问题的评论所建议的那样),并在执行时与'
进行比较
请注意,如果您在特定操作系统(如MacOS)上运行程序,则使用os.linesep
可能不一定能像您预期的那样工作,但您正在检查的文件来自不同的操作系统(如Linux),因为行尾将不同。因此,要检查所有案例,您必须执行以下操作:
if line == os.linesep:
count += 1
if line == '\n' or line == '\r' or line == '\r\n':
count += 1
希望这能有所帮助。用一种更简单的方式:
with open(filename) as fd:
count = sum(1 for line in fd if len(line.strip()) == 0)
这将保持时间上的线性复杂度和内存中的恒定复杂度。
而且,最重要的是,它将变量
count
作为手动递增的变量删除。每行以换行符'\n'
结尾。请注意,它只是一个字符
一个简单的解决方法是检查行是否等于
'\n'
,或者它的长度是否为1,而不是0。您可以使用itertools中的count,它返回迭代器。此外,我只使用了条带,而不是检查长度
from itertools import count
counter = count()
with open('myfile.txt', 'r') as f:
for line in f.readlines():
if not line.strip():
counter.next()
print counter.next()
空行仍然包含换行符
strip()
将删除空白,包括换行符。如果不是line.strip():请使用,在Windows上创建的文本文件中,该行将以'\r\n'
结尾,空行的长度为2。使用strip
,这就是它的用途。添加整数不会增加内存使用。我认为这取决于整数的大小,对吗?是的,但这不是重点:itertools.count
至少使用与手动计数器相同的内存。@aluriak同意。编辑。