次のようなログファイルからフォーマットされた文字列があります。
_>>> a="test result"
_
つまり、テストと結果はいくつかのスペースで区切られます-test
に一定の間隔を与えるフォーマットされた文字列を使用して作成された可能性があります。
単純な分割ではうまくいきません:
_>>> a.split(" ")
['test', '', '', '', ... '', '', '', '', '', '', '', '', '', '', '', 'result']
_
split(DELIMITER, COUNT)
はいくつかの不要な値をクリアしました:
_>>> a.split(" ",1)
['test', ' result']
_
これは役に立ちました-もちろん、私は本当に必要です:
_['test', 'result']
_
split()
の後にmap
+ strip()
を使用できますが、もっとPython的な方法があるかどうか疑問に思いました。
おかげで、
アダム
PDATE:このようなシンプルなソリューション!皆さん、ありがとうございました。
デリミタを与えないだけですか?
>>> a="test result"
>>> a.split()
['test', 'result']
>>> import re
>>> a="test result"
>>> re.split(" +",a)
['test', 'result']
>>> a.split()
['test', 'result']
これだけでうまくいくはずです:
a.split()
例:
>>> 'a b'.split(' ')
['a', '', '', '', '', '', 'b']
>>> 'a b'.split()
['a', 'b']
ドキュメント から:
Sepが指定されていないかNoneの場合、別の分割アルゴリズムが適用されます。連続する空白の実行は単一の区切り文字と見なされ、文字列の先頭または末尾に空白がある場合、結果の先頭または末尾に空の文字列は含まれません。したがって、空の文字列または空白のみで構成される文字列をNoneのセパレータで分割すると、[]が返されます。
単純なa.split()
に問題がありますか?
区切り文字を1回以上使用して分割する場合で、デフォルトのsplit()
だけを頼りにして、ユースケースに一致するパラメーターがない場合は、正規表現を使用して区切り文字を一致させることができます。次の例では、区切り文字として.
を1つ以上使用します。
s = 'a.b....c......d.ef...g'
sp = re.compile('\.+').split(s)
print(sp)
それは与える:
['a', 'b', 'c', 'd', 'ef', 'g']
もう1つの方法を追加するだけで、区切り文字がスペースと異なり、s.split()が機能しない場合に便利です。
str = "Python、is , more , flexible"のように。
In [27]: s = "Python is more flexible"
In [28]: str_list = list(filter(lambda x: len(x) > 0, s.split(" ")))
In [29]: str_list
Out[29]: ['Python', 'is', 'more', 'flexible']