Python - 计算文本文件中的空白行

时间:2016-09-02 08:33:58

标签: 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 lines:
   if line == '':                   #or if len(line) == 0
     count += 1

count始终为0.我如何计算空行数?

4 个答案:

答案 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()