web-dev-qa-db-ja.com

Pythonで1つ以上の区切り文字を使用して分割するにはどうすればよいですか?

次のようなログファイルからフォーマットされた文字列があります。

_>>> a="test                            result"
_

つまり、テストと結果はいくつかのスペースで区切られます-testに一定の間隔を与えるフォーマットされた文字列を使用して作成された可能性があります。

単純な分割ではうまくいきません:

_>>> a.split(" ")
['test', '', '', '', ... '', '', '', '', '', '', '', '', '', '', '', 'result']
_

split(DELIMITER, COUNT)はいくつかの不要な値をクリアしました:

_>>> a.split(" ",1)
['test', '                           result']
_

これは役に立ちました-もちろん、私は本当に必要です:

_['test', 'result']
_

split()の後にmap + strip()を使用できますが、もっとPython的な方法があるかどうか疑問に思いました。

おかげで、

アダム

PDATE:このようなシンプルなソリューション!皆さん、ありがとうございました。

31
Adam Matan

デリミタを与えないだけですか?

>>> a="test                            result"
>>> a.split()
['test', 'result']
52
Kimvais
>>> import re
>>> a="test                            result"
>>> re.split(" +",a)
['test', 'result']

>>> a.split()
['test', 'result']
33
ghostdog74

これだけでうまくいくはずです:

a.split()

例:

>>> 'a      b'.split(' ')
['a', '', '', '', '', '', 'b']
>>> 'a      b'.split()
['a', 'b']

ドキュメント から:

Sepが指定されていないかNoneの場合、別の分割アルゴリズムが適用されます。連続する空白の実行は単一の区切り文字と見なされ、文字列の先頭または末尾に空白がある場合、結果の先頭または末尾に空の文字列は含まれません。したがって、空の文字列または空白のみで構成される文字列をNoneのセパレータで分割すると、[]が返されます。

18
Mark Byers

単純なa.split()に問題がありますか?

4
YOU

区切り文字を1回以上使用して分割する場合で、デフォルトのsplit()だけを頼りにして、ユースケースに一致するパラメーターがない場合は、正規表現を使用して区切り文字を一致させることができます。次の例では、区切り文字として.を1つ以上使用します。

s = 'a.b....c......d.ef...g'
sp = re.compile('\.+').split(s)
print(sp)

それは与える:

['a', 'b', 'c', 'd', 'ef', 'g']
2
theferrit32

もう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']
0
anshu kumar