我在python字符串中有一些包含无关空行的代码。我想从字符串中删除所有空行。什么是最蟒蛇的方式呢?
注意:我不是在寻找一般的代码重新格式化程序,只需要快速的一行或两行。
谢谢!
答案 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的答案,您可以将filter
与join
结合使用以获得所需的字符串,
"".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"