Подтвердить что ты не робот

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

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

Примечание. Я не ищу общий реформатор кода, просто быстрый или двухстрочный.

Спасибо!

4b9b3361

Ответ 1

Как насчет:

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

где text - строка с возможными посторонними строками?

Ответ 2

"\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().

Ответ 3

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()]

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

Ответ 4

УРОК НА УДАЛЕНИЕ НОВЫХ ЛИНИЙ И ПУСТЫХ ЛИНИЙ С ПРОСТРАНСТВАМИ

"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'

Обратите внимание, что существует другой способ установить переменную, используя тройные кавычки

somevar="""
   asdfas
asdf

  asdf

  asdf

asdf
""""

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

>>> 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?

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

Таким образом, строки новой строки - это только символы новой строки, а некоторые имеют пробелы, поэтому они выглядят как новые строки

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

>>> 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?

ПРИМЕЧАНИЕ: эта полоса в t.strip(). splitline (True) может быть удалена, так что ее просто t.splitlines(True), но тогда ваш вывод может завершиться добавлением новой строки (чтобы удалить последнюю новую строку). Полоса() в последней части s.strip( "\ 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).

Со вторым примером (только для удаления строк)

>>> 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).

КОНЕЦ!

Ответ 5

Используя функцию re.sub

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

Ответ 6

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

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

Ответ 7

Ниже приведено однострочное решение:

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

Ответ 8

И теперь для чего-то совершенно другого:

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')
'a\012   b   \012c'

Эпизод 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)

Ответ 9

развивая ответ ymv, вы можете использовать filter с join чтобы получить желаемую строку,

"".join(filter(str.strip, sample_string.splitlines(True)))

Ответ 10

Этот код удаляет пустые строки (с пробелами или без них).

import re    
re.sub(r'\n\s*\n', '\n', text, flags=re.MULTILINE)