什么是从pythonstring中删除空行的快速单行程?

我有一些pythonstring中包含无关的空行的代码。 我想删除string中的所有空行。 什么是最pythonic的方式来做到这一点?

注意:我不是在寻找一个通用代码重新格式化器,只是一个快速的一个或两个class轮。

谢谢!

怎么样:

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

哪里的text是可能多余的string?

 "\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”是文本的variables。 你会看到一个“s”variables,它是一个临时variables,只存在于主括号集的评估过程中(忘记了这些lil python的名字)

首先让我们设置“t”variables,使它有新的行:

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

请注意有另一种方法来设置使用三重引号variables

 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? 

命令删除所有空白行(包括空格):

所以有些线新线只是换行符,有些有空格,所以看起来像新线

如果你想摆脱所有空白的行(如果他们只有换行符或空格)

 >>> 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()。stripline(True)中的strip可以被删除,所以它只是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地带**

那里的那个中间带,连接到“t”variables,只是删除了最后一个换行符(正如前面的注释所述)。 这里是如何看起来像没有那条(在那里注意,最后一个换行符)

用第一个例子(用空格去除换行符和换行符)

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

结束!

这一个也会删除空格的行。

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

现在完全不同了:

 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\nb \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) 

这是一个单行的解决scheme:

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