不要な空の行を含む python 文字列にコードがあります。文字列からすべての空行を削除したいと思います。これを行うための最もpythonicな方法は何ですか?
注: 私は一般的なコードの再フォーマッターを探しているのではなく、簡単な 1 つまたは 2 つのライナーを探しています。
ありがとう!
不要な空の行を含む python 文字列にコードがあります。文字列からすべての空行を削除したいと思います。これを行うための最もpythonicな方法は何ですか?
注: 私は一般的なコードの再フォーマッターを探しているのではなく、簡単な 1 つまたは 2 つのライナーを探しています。
ありがとう!
どうですか:
text = os.linesep.join([s for s in text.splitlines() if s])
text
不要な行が含まれている可能性のある文字列はどこにありますか?
"\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() で十分です。
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()]
読みやすさに役立つ場合があります
私見最短で最も Pythonic は次のようになります。
str(textWithEmptyLines).replace('\n\n','')
これはスペースの行も削除します。
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\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)