假设我有一个包含以下内容的文件(每个偶数行都是空白的):
线路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.我如何计算空行数?
答案 0 :(得分:3)
以更简单和pythonic的方式:
with open(filename) as fd:
count = sum(1 for line in fd if len(line.strip()) == 0)
这保持了线性复杂性的时间和内存中的恒定复杂性。
而且,最重要的是,它将变量count
作为手动递增的变量。
答案 1 :(得分:2)
使用readlines()
功能时,它不会自动为您删除EOL字符。所以你要么比较行尾,比如:
if line == os.linesep:
count += 1
(您当然必须导入os
模块),或者删除该行(根据@ khelwood对您的问题的评论建议)并与您''
进行比较
请注意,如果您在某个操作系统上运行程序,使用os.linesep
可能不一定如您所期望的那样工作,例如MacOS,但您检查的文件来自不同的操作系统,例如Linux,因为行结尾会有所不同。因此,要检查所有情况,您必须执行以下操作:
if line == '\n' or line == '\r' or line == '\r\n':
count += 1
希望这有帮助。
答案 2 :(得分:1)
每一行都以换行符'\n'
结尾。请注意,它只有一个字符。
一个简单的解决方法是检查线是否等于'\n'
,或者它的长度是 1 ,而不是0。
答案 3 :(得分:1)
您可以使用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()