python:如何检查行是否为空行


86

试图弄清楚如何编写一个if周期来检查一行是否为空。

该文件包含许多字符串,其中一个是与其他语句分开的空行(不是a "";我认为是回车符,后跟另一个回车符)

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

由于我正在使用文件输入模块,是否可以检查行是否为空?

使用此代码似乎可行,谢谢大家!

for line in x:

    if line == '\n':
        print "found an end of line"

x.close()

Answers:


128

如果要忽略仅包含空格的行:

if not line.strip():
    ... do something

空字符串是False值。

或者,如果您只想要空行:

if line in ['\n', '\r\n']:
    ... do  something

第二个做了我想的,谢谢!如果在['\ n']行:
user1006198 2011年

1
如果仅使用if line in ['\n'],则应将其替换为if line == '\n'
Andrew Clark

7
我想指出的是,接受的答案有一个错误:if line.strip():...#执行某些操作会忽略带有空格的行,即空格,制表符和空行。这就是为什么只有第二个为原始海报工作的原因:“ not”必须删除。
niefpaarschoenen 2013年

3
如果不是line.strip():...做点什么。它不应该继续吗?因为如果不是,那么line.strip()实际上意味着该行为空,因此不能从中剥离任何内容,因此可以忽略或继续。第一部分不是line.strip()捕获所有空行
Dhiwakar Ravikumar 2015年

1
os.linesep代替它会更清洁['\n', '\r\n']吗?
肖恩

24

我使用以下代码来测试带有或不带有空格的空行。

if len(line.strip()) == 0 :
    # do something with empty line

11
line.strip() == ''

或者,如果您不想“吃掉”由空格组成的行:

line in ('\n', '\r\n')

1
在第二个示例中,您可能还想检查一下\r\nWindows样式的行尾(CRLF)
-poplitea

忘了提到它在Unix机器上运行,因此它使用不带\ r的换行符。试过了,但它不起作用,对我
有用吗

1
@ user1006198:如果仅检查\n,则line == '\n'更好。您可能应该再试一次,找出问题所在。
11

@ user1006198:(1)在Unix上读取Windows创建的文本文件将为您提供帮助,\r\n如果您不使用它mode='rU'(2)给出一个线索:print repr(line)如果没有提供线索,请告诉我们到底什么“不起作用”对你意味着
约翰·马钦

我唯一的解释是,文件输入可能对每一行都执行了某些操作,因为当我将行与==进行比较时,我不会执行该语句(打印字符串以查看是否击中了空白行) ,并且使用==时,它永远不会打印调试行,而当我使用“ if line in”时,它不会执行。
user1006198 2011年


1

我认为使用正则表达式更可靠:

import re

for i, line in enumerate(content):
    print line if not (re.match('\r?\n', line)) else pass

这将在Windows / unix中匹配。另外,如果您不确定仅包含空格字符的行,可以将其 '\s*\r?\n'用作表达式

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.