什么是从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()]))