Как удалить пустые строки с или без пробелов в Python

У меня есть большая строка, которую я разделил на новые строки. Как я могу удалить все пустые строки (только пробелы)?

псевдокод:

for stuff in largestring:
   remove stuff that is blank

15 ответов

Решение

Используя регулярное выражение:

if re.match(r'^\s*$', line):
    # line is empty (has only the following: \t\n\r and whitespace)

Использование регулярных выражений + filter():

filtered = filter(lambda x: not re.match(r'^\s*$', x), original)

Как видно на кодовой панели.

Попробуйте понимание списка и string.strip():

>>> mystr = "L1\nL2\n\nL3\nL4\n  \n\nL5"
>>> mystr.split('\n')
['L1', 'L2', '', 'L3', 'L4', '  ', '', 'L5']
>>> [line for line in mystr.split('\n') if line.strip() != '']
['L1', 'L2', 'L3', 'L4', 'L5']

Я также попробовал regexp и перечислил решения, и перечислите одно быстрее.

Вот мое решение (по предыдущим ответам):

text = "\n".join([ll.rstrip() for ll in original_text.splitlines() if ll.strip()])

Редактировать: Вау, я думаю, что опустить очевидное не в порядке.

lines = bigstring.split()
lines = [line for line in lines if line.strip()]

Удивленный многострочный re.sub не был предложен (О, потому что вы уже разбили свою строку... Но почему?):

>>> import re
>>> a = "Foo\n \nBar\nBaz\n\n   Garply\n  \n"
>>> print a
Foo

Bar
Baz

        Garply


>>> print(re.sub(r'\n\s*\n','\n',a,re.MULTILINE))
Foo
Bar
Baz
        Garply

>>> 

Если вы не хотите использовать регулярные выражения (что вам следует), вы можете использовать это:

s.replace('\n\n','\n')

Повторите это несколько раз, чтобы убедиться, что не осталось пустой строки. Или цепочки команд:

s.replace('\n\n','\n').replace('\n\n','\n')

Вы можете просто использовать rstrip:

    for stuff in largestring:
        print(stuff.rstrip("\n")

Мой оригинальный текст: Эми Понд была похищена, и Доктор собирает армию, чтобы спасти ее, поскольку драма продолжается. Но пока он и Рори мчатся по галактикам, зовут долгов и держат торжественные обещания, его враги ставят тщательно скрытые ловушки.

В своей камере в клетке Шторма Ривер Сонг с грустью признает, что время наконец настало - сегодня состоится Битва Демонов и самый темный час Доктора. Обе стороны будут приносить свои жертвы, и Ривер Сонг должна наконец раскрыть свой самый тщательно охраняемый секрет.

я удалил пустую строку и соединил все вместе как одну строку с этим решением:

match_p = re.sub(r'\s{2}', '', my_txt) # my_txt is text above

Моя версия:

while '' in all_lines:
    all_lines.pop(all_lines.index(''))

komodo edit удалить пустые строки

В редакторе komodo нажмите Ctrl+H "Звездная метка" (рассматривается как регулярное выражение), нажмите ссылку выше, чтобы просмотреть снимок.

Вы можете объединитьmapиstripудалить пробелы и использоватьfilter(None, iterable)удалить пустые элементы:

      string = "a\n \n\nb"
list_of_str = string.split("\n")
list_of_str = filter(None, map(str.strip, list_of_str))
list(list_of_str)

Возврат:['a', 'b']

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

      re.sub(r'(?<=\n)\s+', '', s, re.MULTILINE)

Когда вы вводите:

      foo
<tab> <tab>

bar

Результатом будет:

      foo
bar
      str_whith_space = """
    example line 1

    example line 2
    example line 3

    example line 4"""

new_str = '\n'.join(el.strip() for el in str_whith_space.split('\n') if el.strip())
print(new_str)

Выход:

      """ <br>
example line 1 <br>
example line 2 <br>
example line 3 <br>
example line 4 <br>
"""

То же, что и @NullUserException, вот как я это пишу:

removedWhitespce = re.sub(r'^\s*$', '', line)
while True:
    try:
        all_lines.remove('')
    except ValueError:
        break
Другие вопросы по тегам