【问题标题】:python: how to check if a line is an empty linepython:如何检查一行是否为空行
【发布时间】:2011-12-15 08:08:52
【问题描述】:

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

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

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

由于我使用的是文件输入模块,有没有办法检查一行是否为空?

使用此代码似乎可以工作,谢谢大家!

for line in x:

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

x.close()

【问题讨论】:

    标签: python


    【解决方案1】:

    如果你想忽略只有空格的行:

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

    空字符串是 False 值。

    或者如果你真的只想要空行:

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

    【讨论】:

    • 第二个符合我的想法,谢谢!如果 ['\n'] 中的行:
    • 如果你只使用if line in ['\n'],你应该用if line == '\n'替换它。
    • 我想指出,接受的答案有一个错误: if line.strip(): ... #do something 忽略带有空格的行,即空格、制表符和空行。这就是为什么只有第二个适用于原始海报:必须删除“不”。
    • 如果不是 line.strip(): ... 做点什么。它不应该继续吗?因为如果不是 line.strip() 实际上意味着该行是空的,因此无法从中剥离任何内容,因此忽略或继续。第一部分不是 line.strip() 捕获所有空行
    • 使用os.linesep而不是['\n', '\r\n']会更干净吗?
    【解决方案2】:

    我使用下面的代码来测试有无空格的空行。

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

    【讨论】:

    • # 用空行做一些事情 --> 如果我想删除行怎么办?
    【解决方案3】:
    line.strip() == ''
    

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

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

    【讨论】:

    • 在第二个示例中,您可能还想检查 \r\n 以说明 Windows 样式的行尾 (CRLF)
    • 忘了提到这是在 Unix 机器上运行的,所以它使用不带 \r 的换行符。你试过了,但没用,什么对我有用:如果 ['\n'] 中的行:(不知道为什么行 =="\n" 不起作用)
    • @user1006198:如果您只检查\n,那么line == '\n' 更好。您可能应该再试一次,找出问题所在。
    • @user1006198: (1) 如果你不使用mode='rU',在Unix上读取一个Windows创建的文本文件会给你\r\n (2) 得到一个线索:print repr(line) 如果那样的话不提供线索,请准确告诉我们“不起作用”对您意味着什么。
    • 我唯一的解释是文件输入可能对每一行都有作用,因为当我将行与 == 进行比较时,我没有点击语句(打印字符串看看我是否点击了空白行,并且使用 == 它从不打印调试行,而当我使用“if line in”时它会打印)。
    【解决方案4】:

    您应该使用rU 打开文本文件,以便正确转换换行符,请参阅http://docs.python.org/library/functions.html#open。这样就不需要检查\r\n

    【讨论】:

    • 尝试打开,但我发现文件输入更适合我的情况
    • 另外需要注意的是,U参数在python3中是不支持的。
    【解决方案5】:

    我认为使用正则表达式更健壮:

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

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

    【讨论】:

      猜你喜欢
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      相关资源
      最近更新 更多