python: как проверить, является ли строка пустой строкой

86

Пытаюсь понять, как написать цикл if, чтобы проверить, пуста ли строка.

В файле много строк, и одна из них - это пустая строка, которая отделяется от других операторов (не ""; это возврат каретки, за которым следует другой возврат каретки, я думаю)

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

Поскольку я использую модуль ввода файла, есть ли способ проверить, пуста ли строка?

Используя этот код, похоже, он работает, спасибо всем!

for line in x:

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

x.close()
user1006198
источник

Ответы:

128

Если вы хотите игнорировать строки только с пробелами:

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

Пустая строка - это значение False.

Или, если вам действительно нужны только пустые строки:

if line in ['\n', '\r\n']:
    ... do  something
втягивать
источник
второй делает то, что я задумал, спасибо! если строка в ['\ n']:
user1006198
1
Если вы только используете if line in ['\n'], замените его на if line == '\n'.
Эндрю Кларк
7
Я хотел бы указать, что в принятом ответе есть ошибка: if line.strip (): ... #do something игнорирует строки с пробелами, т.е. пробел, табуляцию и пустую строку. Поэтому для исходного плаката сработал только второй: нужно удалить «не».
niefpaarschoenen
3
если не line.strip (): ... сделай что-нибудь. Разве это не должно продолжаться вместо этого? потому что, если не line.strip () фактически означает, что строка пуста, поэтому из нее ничего нельзя удалить, поэтому игнорируйте или продолжайте. Первая часть, кроме line.strip (), захватывает все пустые строки
Дивакар Равикумар
1
Было бы чище использовать os.linesepвместо ['\n', '\r\n']?
Шон
24

Я использую следующий код для проверки пустой строки с пробелами или без них.

if len(line.strip()) == 0 :
    # do something with empty line
Bevardgisuser
источник
11
line.strip() == ''

Или, если вы не хотите «съедать» строки, состоящие из пробелов:

line in ('\n', '\r\n')
Фред Фу
источник
1
Во втором примере вы, вероятно, также захотите проверить, \r\nчтобы учесть окончание строк в стиле Windows (CRLF)
poplitea
забыл упомянуть, что это работает на машине Unix, поэтому он использует новую строку без \ r. Пробовал ты, но это не сработало, что у меня работает: if строка в ['\ n']: (не знаю, почему строка == "\ n" не будет работать)
user1006198
1
@ user1006198: если вы только проверяете \n, то line == '\n'лучше. Возможно, вам стоит попробовать еще раз и выяснить, в чем была ваша проблема.
ретроспективно
@ user1006198: (1) Чтение текстового файла, созданного Windows в Unix, даст вам, \r\nесли вы не используете mode='rU'(2) Получите подсказку: print repr(line)и если это не дает подсказки, скажите нам, что именно «не работает» значит для вас.
Джон Мачин
Единственное объяснение, которое у меня есть, это то, что, вероятно, ввод файла что-то делает с каждой строкой, потому что, когда я сравниваю строку с ==, я не попадаю в оператор (печать строки, чтобы увидеть, попал ли я в пустую строку , и с == он никогда не печатает строку отладки, в то время как он делает это, когда я использую «if line in»).
user1006198
2

Вы должны открывать текстовые файлы, используя rUдля правильного преобразования новых строк, см. Http://docs.python.org/library/functions.html#open . Таким образом, нет необходимости проверять \r\n.

Hochl
источник
попробовал открыть, но я считаю, что ввод файла более подходит для моего случая
user1006198
5
Также следует отметить, что Uаргумент не поддерживается в python3.
jtwilson
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'выражение

алемол
источник