Como removo todos os espaços em uma string python? Por exemplo, eu quero que uma string strip my spaces
seja transformada stripmyspaces
, mas não consigo fazer isso com strip()
:
>>> 'strip my spaces'.strip()
'strip my spaces'
Como removo todos os espaços em uma string python? Por exemplo, eu quero que uma string strip my spaces
seja transformada stripmyspaces
, mas não consigo fazer isso com strip()
:
>>> 'strip my spaces'.strip()
'strip my spaces'
Respostas:
Aproveitando o comportamento do str.split sem o parâmetro sep:
>>> s = " \t foo \n bar "
>>> "".join(s.split())
'foobar'
Se você deseja apenas remover espaços em vez de todos os espaços em branco:
>>> s.replace(" ", "")
'\tfoo\nbar'
Mesmo que a eficiência não seja o objetivo principal - escrever código claro -, aqui estão alguns horários iniciais:
$ 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
Observe que o regex é armazenado em cache, portanto, não é tão lento quanto você imagina. Compilá-lo de antemão ajuda alguns, mas só importa na prática se você chamar isso muitas vezes:
$ 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
Embora o re.sub seja 11,3x mais lento, lembre-se de que seus gargalos estão garantidos em outros lugares. A maioria dos programas não notaria a diferença entre nenhuma dessas três opções.
\s+
substituição. Eu ficaria com re.
s.translate
método por acaso? Provavelmente, supera todos os métodos mostrados nesta página.
None
- embora, surpreendentemente, que o torna mais lento ...
myString.translate(None, " \t\r\n\v")
. Leva apenas 83% do tempo que a técnica mais rápida (dividir e unir) de Roger. Não tenho certeza se ele cobre todos os caracteres de espaço em branco que a divisão faz, mas provavelmente será suficiente para a maioria dos aplicativos ASCII.
>>> import re
>>> re.sub(r'\s+', '', 'strip my spaces')
'stripmyspaces'
Também lida com caracteres em branco em que você não está pensando (acredite, há muitos).
Alternativamente,
"strip my spaces".translate( None, string.whitespace )
E aqui está a versão do Python3:
"strip my spaces".translate(str.maketrans('', '', string.whitespace))
NameError: name 'string' is not defined
.
import string
string1=" This is Test String to strip leading space"
print string1
print string1.lstrip()
string2="This is Test String to strip trailing space "
print string2
print string2.rstrip()
string3=" This is Test String to strip leading and trailing space "
print string3
print string3.strip()
string4=" This is Test String to test all the spaces "
print string4
print string4.replace(" ", "")
Experimente uma regex com re.sub
. Você pode procurar por todos os espaços em branco e substituir por uma sequência vazia.
\s
no seu padrão corresponderá a caracteres de espaço em branco - e não apenas a um espaço (guias, novas linhas etc.). Você pode ler mais sobre isso no manual .
import re
re.sub(' ','','strip my spaces')
Conforme mencionado por Roger Pate, o seguinte código funcionou para mim:
s = " \t foo \n bar "
"".join(s.split())
'foobar'
Estou usando o Jupyter Notebook para executar o seguinte código:
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
As técnicas convencionais para filtrar uma lista aplicar, embora eles não são tão eficientes quanto o split/join
ou translate
métodos.
Precisamos de um conjunto de espaços em branco:
>>> import string
>>> ws = set(string.whitespace)
O filter
builtin:
>>> "".join(filter(lambda c: c not in ws, "strip my spaces"))
'stripmyspaces'
Uma compreensão da lista (sim, use os colchetes: veja a referência abaixo):
>>> import string
>>> "".join([c for c in "strip my spaces" if c not in ws])
'stripmyspaces'
Uma dobra:
>>> import functools
>>> "".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))
'stripmyspaces'
Referência:
>>> 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
TL / DR
Esta solução foi testada usando Python 3.6
Para remover todos os espaços de uma string no Python3, você pode usar a seguinte função:
def remove_spaces(in_string: str):
return in_string.translate(str.maketrans({' ': ''})
Para remover qualquer caractere de espaço em branco ('\ t \ n \ r \ x0b \ x0c'), você pode usar a seguinte função:
import string
def remove_whitespace(in_string: str):
return in_string.translate(str.maketrans(dict.fromkeys(string.whitespace)))
Explicação
O str.translate
método Python é um método de classe interno de str, pega uma tabela e retorna uma cópia da string com cada caractere mapeado na tabela de conversão passada. Documentação completa para str.translate
Para criar a tabela de conversão str.maketrans
é usado. Este método é outro método de classe interno de str
. Aqui, usamos apenas um parâmetro, neste caso, um dicionário, onde as chaves são os caracteres a serem substituídos, mapeados para valores com o valor de substituição de caracteres. Retorna uma tabela de conversão para uso com str.translate
. Documentação completa para str.maketrans
O string
módulo em python contém algumas operações e constantes de string comuns. string.whitespace
é uma constante que retorna uma sequência que contém todos os caracteres ASCII considerados em branco. Isso inclui os caracteres espaço, tabulação, avanço de linha, retorno, avanço de formulário e guia vertical. Documentação completa para string
Na segunda função dict.fromkeys
é usada para criar um dicionário onde as chaves são os caracteres na string retornados por string.whitespace
cada um com valor None
. Documentação completa para dict.fromkeys
Se o desempenho ideal não é um requisito e você quer apenas algo simples, você pode definir uma função básica para testar cada caractere usando o método "isspace" incorporado da classe de cadeia de caracteres:
def remove_space(input_string):
no_white_space = ''
for c in input_string:
if not c.isspace():
no_white_space += c
return no_white_space
Construir a no_white_space
string dessa maneira não terá desempenho ideal, mas a solução é fácil de entender.
>>> remove_space('strip my spaces')
'stripmyspaces'
Se você não deseja definir uma função, pode convertê-la em algo vagamente semelhante à compreensão da lista. Empréstimos da join
solução da resposta principal :
>>> "".join([c for c in "strip my spaces" if not c.isspace()])
'stripmyspaces'