Что такое быстрая однострочка для удаления пустых строк из строки python?

У меня есть код в строке python, которая содержит посторонние пустые строки. Я хотел бы удалить все пустые строки из строки. Что наиболее подходящие для Python способ сделать это?

примечание: Я не ищу общего ре-форматер кода, просто быстро один или два вкладыша.

спасибо!

8 ответов


Как насчет:

text = os.linesep.join([s for s in text.splitlines() if s])

здесь text является ли строка с возможными посторонними линиями?


"\n".join([s for s in code.split("\n") if s])

Edit2:

text = "".join([s for s in code.splitlines(True) if s.strip("\r\n")])

Я думаю, что это моя окончательная версия. Он должен хорошо работать даже с окончаниями линии смешивания кода. Я не думаю, что линия с пробелами должна считаться пустой, но если это так, то простой s.вместо этого будет strip ().


filter(None, code.splitlines())
filter(str.strip, code.splitlines())

эквивалентно

[s for s in code.splitlines() if s]
[s for s in code.splitlines() if s.strip()]

и может быть полезно для удобочитаемости


урок по удалению новых строк и пустых строк с пробелами

" t " - переменная с текстом. Вы увидите переменную "s", ее временную переменную, которая существует только во время оценки основного набора скобок (забыл название этих вещей Lil python)

сначала давайте установим переменную "t", чтобы она имела новые строки:

>>> t='hi there here is\na big line\n\nof empty\nline\neven some with spaces\n       \nlike that\n\n    \nokay now what?\n'

Примечание есть еще один способ установить varible с помощью triple котировки

somevar="""
   asdfas
asdf

  asdf

  asdf

asdf
""""

вот как это выглядит, когда мы рассматриваем его без "печати":

>>> t
'hi there here is\na big line\n\nof empty\nline\neven some with spaces\n       \nlike that\n\n    \nokay now what?\n' 

чтобы увидеть с фактическими новыми строками, распечатайте его.

>>> print t
hi there here is
a big line

of empty
line
even some with spaces

like that


okay now what?

КОМАНДА УДАЛИТЬ ВСЕ ПУСТЫЕ СТРОКИ (ВКЛЮЧАЯ ПРОБЕЛЫ):

так somelines строки являются просто строками, а в некоторых местах, чтобы они выглядели как новые строки

если вы хотите избавиться от всех пустых строк (если у них есть только новые строки или пробелы, как ну)

>>> print "".join([s for s in t.strip().splitlines(True) if s.strip()])
hi there here is
a big line
of empty
line
even some with spaces
like that
okay now what?

или:

>>> print "".join([s for s in t.strip().splitlines(True) if s.strip("\r\n").strip()])
hi there here is
a big line
of empty
line
even some with spaces
like that
okay now what?

Примечание: эта полоса в т. strip().splitline (True) можно удалить, поэтому его просто t.splitlines (True), но затем ваш вывод может закончиться дополнительной новой строкой (так что удаляет последнюю новую строку). Полоса () в последней части s.полоса ("\r\n").strip() и s.strip () - это то, что фактически удаляет пробелы в новых строках и новых строках.

КОМАНДА УДАЛИТЬ ВСЕ ПУСТЫЕ СТРОКИ (НО НЕ С Пробелы):

технически линии с пробелами не следует считать пустыми, но все зависит от варианта использования и того, чего вы пытаетесь достичь.

>>> print "".join([s for s in t.strip().splitlines(True) if s.strip("\r\n")])
hi there here is
a big line
of empty
line
even some with spaces

like that

okay now what?

** обратите внимание на эту среднюю полосу**

эта средняя полоса, прикрепленная к переменной "t", просто удаляет последнюю новую строку (так же, как указано в предыдущей заметке). Вот как это будет выглядеть без этой полосы (обратите внимание, что последняя новая строка)

С 1-го пример (удаление новых строк и новых строк с пробелами)

>>> print "".join([s for s in t.strip().splitlines(True) if s.strip("\r\n").strip()])
hi there here is
a big line
of empty
line
even some with spaces
like that
okay now what?
.without strip new line here (stackoverflow cant have me format it in).

со 2-м примером (удаление только новых строк)

>>> print "".join([s for s in t.strip().splitlines(True) if s.strip("\r\n")])
hi there here is
a big line
of empty
line
even some with spaces

like that

okay now what?
.without strip new line here (stackoverflow cant have me format it in).

конец!


Этот также удалит строки пробелов.

re.replace(u'(?imu)^\s*\n', u'', code)


С помощью re.sub модуль

re.sub(r'^$\n', '', s, flags=re.MULTILINE)

а теперь нечто совсем другое:

Python 1.5.2 (#0, Apr 13 1999, 10:51:12) [MSC 32 bit (Intel)] on win32
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> import string, re
>>> tidy = lambda s: string.join(filter(string.strip, re.split(r'[\r\n]+', s)), '\n')
>>> tidy('\r\n   \n\ra\n\n   b   \r\rc\n\n')
'a2   b   2c'

Эпизод 2:

это не работает на 1.5 : - (

но он не только обрабатывает универсальные новые строки и пустые строки, он также удаляет конечные пробелы (хорошая идея при очистке строк кода IMHO) и выполняет работу по ремонту, если последняя значимая строка не завершена.

import re
tidy = lambda c: re.sub(
    r'(^\s*[\r\n]+|^\s*\Z)|(\s*\Z|\s*[\r\n]+)',
    lambda m: '\n' if m.lastindex == 2 else '',
    c)

вот решение одной строки:

print("".join([s for s in mystr.splitlines(True) if s.strip()]))