web-dev-qa-db-ja.com

文字列からすべての空白を削除する方法

Python文字列のすべてのスペースを削除するにはどうすればよいですか?たとえば、strip my spacesのような文字列をstripmyspacesに変換したいのですが、それをstrip()で達成できないようです:

>>> 'strip my spaces'.strip()
'strip my spaces'
156
wrongusername

Sepパラメータなしでstr.splitの動作を利用する:

>>> s = " \t foo \n bar "
>>> "".join(s.split())
'foobar'

すべての空白の代わりにスペースを削除するだけの場合:

>>> s.replace(" ", "")
'\tfoo\nbar'

時期尚早の最適化

効率が第一の目標ではありませんが、明確なコードを書くことが次のような初期のタイミングです。

$ python -m timeit '"".join(" \t foo \n bar ".split())'
1000000 loops, best of 3: 1.38 usec per loop
$ python -m timeit -s 'import re' 're.sub(r"\s+", "", " \t foo \n bar ")'
100000 loops, best of 3: 15.6 usec per loop

正規表現はキャッシュされているため、想像するほど遅くはありません。事前にコンパイルすることはいくつかの助けになりますが、実際にこれを呼び出す場合にのみ問題になりますmany times:

$ python -m timeit -s 'import re; e = re.compile(r"\s+")' 'e.sub("", " \t foo \n bar ")'
100000 loops, best of 3: 7.76 usec per loop

Re.subは11.3倍遅くなりますが、ボトルネックは確実に他の場所にあることに注意してください。ほとんどのプログラムでは、これら3つの選択肢の違いに気付かないでしょう。

266
Roger Pate
>>> import re
>>> re.sub(r'\s+', '', 'strip my spaces')
'stripmyspaces'

また、あなたが考えていない空白文字も処理します(信じてください、たくさんあります)。

50
Tim Yates

あるいは、

"strip my spaces".translate( None, string.whitespace )

そして、これがPython3バージョンです:

"strip my spaces".translate(str.maketrans('', '', string.whitespace))
27
Dan Menes

最も簡単なのはreplaceを使用することです:

"foo bar\t".replace(" ", "").replace("\t", "")

または、正規表現を使用します。

import re
re.sub(r"\s", "", "foo bar\t")
12
carl

Pythonで開始スペースを削除する

string1="    This is Test String to strip leading space"
print string1
print string1.lstrip()

Pythonで末尾または末尾のスペースを削除する

string2="This is Test String to strip trailing space     "
print string2
print string2.rstrip()

Pythonの文字列の先頭と末尾から空白を削除します

string3="    This is Test String to strip leading and trailing space      "
print string3
print string3.strip()

Pythonのすべてのスペースを削除します

string4="   This is Test String to test all the spaces        "
print string4
print string4.replace(" ", "")
4
JohnSmitoff

re.subで正規表現を試してください。すべての空白を検索して、空の文字列に置き換えることができます。

パターン内の\sは、スペース(タブ、改行など)だけでなく、空白文字と一致します。あなたはそれについてもっと読むことができます マニュアルで

3
Matthew Iselin
import re
re.sub(' ','','strip my spaces')
3
PrabhuPrakash

ロジャー・ペイトが言及したように、次のコードが私のために働いた:

s = " \t foo \n bar "
"".join(s.split())
'foobar'

Jupyter Notebookを使用して、次のコードを実行しています。

i=0
ProductList=[]
while i < len(new_list): 
   temp=''                            # new_list[i]=temp=' Plain   Utthapam  '
   #temp=new_list[i].strip()          #if we want o/p as: 'Plain Utthapam'
   temp="".join(new_list[i].split())  #o/p: 'PlainUtthapam' 
   temp=temp.upper()                  #o/p:'PLAINUTTHAPAM' 
   ProductList.append(temp)
   i=i+2
2
Yogesh

TL/DR

このソリューションは、Python 3.6を使用してテストされました

Python3で文字列からすべてのスペースを削除するには、次の関数を使用できます。

def remove_spaces(in_string: str):
    return in_string.translate(str.maketrans({' ': ''})

空白文字( '\ t\n\r\x0b\x0c')を削除するには、次の関数を使用できます。

import string
def remove_whitespace(in_string: str):
    return in_string.translate(str.maketrans(dict.fromkeys(string.whitespace)))

説明

Pythonのstr.translateメソッドはstrの組み込みクラスメソッドであり、テーブルを取得し、渡された変換テーブルを介してマッピングされた各文字を含む文字列のコピーを返します。 str.translateの完全なドキュメント

変換テーブルを作成するには、str.maketransが使用されます。このメソッドは、strの別の組み込みクラスメソッドです。ここでは、1つのパラメーター(この場合は辞書)のみで使用します。この場合、キーは、文字置換値を持つ値にマップされる置換される文字です。 str.translateで使用する変換テーブルを返します。 str.maketransの完全なドキュメント

Pythonのstringモジュールには、いくつかの一般的な文字列操作と定数が含まれています。 string.whitespaceは、空白と見なされるすべてのASCII文字を含む文字列を返す定数です。これには、文字スペース、タブ、ラインフィード、リターン、フォームフィード、および垂直タブが含まれます。 文字列の完全なドキュメント

2番目の関数では、dict.fromkeysを使用して辞書が作成され、キーはstring.whitespaceによって返される文字列内の文字であり、それぞれの値はNoneになります。 dict.fromkeysの完全なドキュメント

0
R. Arctor

リストをフィルタリングする標準的な手法が適用されますが、それらはsplit/joinまたはtranslateメソッドほど効率的ではありません。

一連の空白が必要です。

>>> import string
>>> ws = set(string.whitespace)

filterビルトイン:

>>> "".join(filter(lambda c: c not in ws, "strip my spaces"))
'stripmyspaces'

リストの理解(はい、括弧を使用:以下のベンチマークを参照):

>>> import string
>>> "".join([c for c in "strip my spaces" if c not in ws])
'stripmyspaces'

折り目:

>>> import functools
>>> "".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))
'stripmyspaces'

基準:

>>> from timeit import timeit
>>> timeit('"".join("strip my spaces".split())')
0.17734256500003198
>>> timeit('"strip my spaces".translate(ws_dict)', 'import string; ws_dict = {ord(ws):None for ws in string.whitespace}')
0.457635745999994
>>> timeit('re.sub(r"\s+", "", "strip my spaces")', 'import re')
1.017787621000025

>>> SETUP = 'import string, operator, functools, itertools; ws = set(string.whitespace)'
>>> timeit('"".join([c for c in "strip my spaces" if c not in ws])', SETUP)
0.6484303600000203
>>> timeit('"".join(c for c in "strip my spaces" if c not in ws)', SETUP)
0.950212219999969
>>> timeit('"".join(filter(lambda c: c not in ws, "strip my spaces"))', SETUP)
1.3164566040000523
>>> timeit('"".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))', SETUP)
1.6947649049999995
0
jferard