Como removo todos os espaços em uma string python? Por exemplo, eu quero que uma string strip my spacesseja 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 spacesseja 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.translatemé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.
\sno 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/joinou translatemétodos.
Precisamos de um conjunto de espaços em branco:
>>> import string
>>> ws = set(string.whitespace)
O filterbuiltin:
>>> "".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.translatemé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 stringmó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.whitespacecada 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_spacestring 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 joinsolução da resposta principal :
>>> "".join([c for c in "strip my spaces" if not c.isspace()])
'stripmyspaces'