78

不要な空の行を含む python 文字列にコードがあります。文字列からすべての空行を削除したいと思います。これを行うための最もpythonicな方法は何ですか?

注: 私は一般的なコードの再フォーマッターを探しているのではなく、簡単な 1 つまたは 2 つのライナーを探しています。

ありがとう!

4

13 に答える 13

111

どうですか:

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

text不要な行が含まれている可能性のある文字列はどこにありますか?

于 2009-07-17T00:25:15.777 に答える
22
"\n".join([s for s in code.split("\n") if s])

編集2:

text = "".join([s for s in code.splitlines(True) if s.strip("\r\n")])

それが私の最終バージョンだと思います。行末が混在するコードでもうまく機能するはずです。スペースのある行を空と見なすべきではないと思いますが、そうであれば、代わりに単純な s.strip() で十分です。

于 2009-07-17T00:25:18.257 に答える
14
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()]

読みやすさに役立つ場合があります

于 2009-07-17T07:46:23.640 に答える
3

私見最短で最も Pythonic は次のようになります。

str(textWithEmptyLines).replace('\n\n','')
于 2020-01-05T18:34:11.923 に答える
1

これはスペースの行も削除します。

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

于 2009-07-17T01:15:55.617 に答える
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)
于 2009-07-17T12:24:59.567 に答える