Как удалить пустые строки с или без пробелов в Python - PullRequest
37 голосов
/ 14 сентября 2010

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

псевдокод:

for stuff in largestring:
   remove stuff that is blank

Ответы [ 12 ]

51 голосов
/ 14 сентября 2010

Попробуйте понять список и 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']
44 голосов
/ 14 сентября 2010

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

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)

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

14 голосов
/ 12 июля 2013

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

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

text = "\n".join([ll.rstrip() for ll in original_text.splitlines() if ll.strip()])
10 голосов
/ 14 сентября 2010

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

4 голосов
/ 01 сентября 2015

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

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

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

s.replace('\n\n','\n').replace('\n\n','\n')
2 голосов
/ 10 сентября 2015

Моя версия:

while '' in all_lines:
    all_lines.pop(all_lines.index(''))
1 голос
/ 22 ноября 2018

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

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

Я удалила пустую строку и объединила все вместе в одну линию С ЭТИМ РЕШЕНИЕМ:

match_p = re.sub(r'\s{2}', '', my_txt) # my_txt is text above
1 голос
/ 17 мая 2018

Удивлен, что многострочный 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

>>> 
0 голосов
/ 11 апреля 2019

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

    for stuff in largestring:
        print(stuff.rstrip("\n")
0 голосов
/ 24 мая 2017

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

removedWhitespce = re.sub(r'^\s*$', '', line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...