什么是从python字符串中删除空行的快速单行程序?

时间:2009-07-17 00:21:12

标签: python string line-endings

我在python字符串中有一些包含无关空行的代码。我想从字符串中删除所有空行。什么是最蟒蛇的方式呢?

注意:我不是在寻找一般的代码重新格式化程序,只需要快速的一行或两行。

谢谢!

13 个答案:

答案 0 :(得分:76)

怎么样:

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

其中text是带有可能无关的行的字符串?

答案 1 :(得分:14)

"\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()就会这样做。

答案 2 :(得分:12)

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

可能对可读性有用

答案 3 :(得分:10)

通过空间删除NEWLINES和EMPTY LINES的课程

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

OR:

>>> 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()中的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?

**关于MIDDLE strip **的说明

那里的中间条带,那些附加到“t”变量,只是删除了最后一个换行符(正如前面的说明所述)。如果没有那个条带就会出现这种情况(请注意上一个换行符)

使用第一个示例(删除带有空格的换行符和换行符)

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

结束!

答案 4 :(得分:5)

使用re.sub功能

ptr

答案 5 :(得分:2)

这个也将删除空格行。

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

答案 6 :(得分:2)

这是一个单行解决方案:

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

答案 7 :(得分:1)

最短,最Pythonic的恕我直言是:

str(textWithEmptyLines).replace('\n\n','')

答案 8 :(得分:1)

使用正则表达式 re.sub(r'^$\n', '', somestring, flags=re.MULTILINE)

答案 9 :(得分:0)

现在有一些完全不同的东西:

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: - (

但它不仅处理通用换行符和空白行,还会删除尾随空格(整理代码行时的好主意恕我直言)并在最后一行有意义的行未终止时执行修复工作。

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)

答案 10 :(得分:0)

扩展ymv的答案,您可以将filterjoin结合使用以获得所需的字符串,

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

答案 11 :(得分:0)

此代码删除空白行(带或不带空格)。

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

答案 12 :(得分:0)

我想删除一堆空行,对我有用的是:

if len(line) > 2:
    myfile.write(output)

我选择了2,因为它覆盖了\ r \ n。 我确实想要一些空行只是为了使格式看起来更好,所以在那些情况下,我必须使用:

print("    \n"