Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-计算文本文件中的空行数_Python_File_Lines - Fatal编程技术网

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同意。编辑。