web-dev-qa-db-fra.com

Comment effacer tous les espaces d'une chaîne

Comment effacer tous les espaces d'une chaîne python? Par exemple, je veux qu'une chaîne comme strip my spaces soit transformée en stripmyspaces, mais il me semble impossible d'y parvenir avec strip():

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

Profitant du comportement de str.split sans paramètre sep:

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

Si vous souhaitez simplement supprimer des espaces au lieu de tous les espaces:

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

Optimisation prématurée

Même si l’efficacité n’est pas l’objectif principal (l’écriture d’un code clair, c’est le cas), voici les premières étapes:

$ 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

Notez que l'expression régulière est mise en cache, donc elle n'est pas aussi lente que vous l'imaginez. La compiler au préalable en aidera certains, mais cela n’aurait d’importance en pratique que si vous appelez ceci plusieurs fois:

$ 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

Même si re est plus lent de 11,3 fois, souvenez-vous que vos goulots d'étranglement sont assurément ailleurs. La plupart des programmes ne remarqueraient pas la différence entre ces 3 choix.

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

Gère également tous les espaces que vous ne pensez pas (croyez-moi, il y en a beaucoup).

52
Tim Yates

Alternativement

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

Et voici la version Python3:

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

Le plus simple est d'utiliser replace:

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

Sinon, utilisez une expression régulière:

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

Supprimer les espaces de départ en Python

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

Supprimer les espaces de fin ou de fin en Python

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

Supprimez les whiteSpaces du début et de la fin de la chaîne en Python

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

Supprimer tous les espaces en python

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

Essayez une regex avec re.sub. Vous pouvez rechercher tous les espaces et les remplacer par une chaîne vide.

\s dans votre modèle correspondra aux caractères d'espacement - et pas seulement à un espace (tabulations, nouvelles lignes, etc.). Vous pouvez en savoir plus à ce sujet dans le manuel .

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

Comme mentionné par Roger Pate, le code suivant a fonctionné pour moi:

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

J'utilise Jupyter Notebook pour exécuter le code suivant:

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

Les techniques standard pour filtrer une liste s'appliquent, bien qu'elles ne soient pas aussi efficaces que les méthodes split/join ou translate.

Nous avons besoin d'un ensemble d'espaces blancs:

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

Le filter intégré:

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

Une liste de compréhension (oui, utilisez les parenthèses: voir repère ci-dessous):

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

Un pli:

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

Référence:

>>> 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
1
jferard

TL/DR

Cette solution a été testée avec Python 3.6.

Pour supprimer tous les espaces d'une chaîne en Python3, vous pouvez utiliser la fonction suivante:

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

Pour supprimer tous les caractères d'espacement ('\ t\n\r\x0b\x0c'), vous pouvez utiliser la fonction suivante:

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

Explication

La méthode str.translate de Python est une méthode de classe intégrée de str, elle prend une table et renvoie une copie de la chaîne avec chaque caractère mappé à travers la table de traduction transmise. Documentation complète pour str.translate

Pour créer la table de traduction, str.maketrans est utilisé. Cette méthode est une autre méthode de classe intégrée de str. Nous l'utilisons ici avec un seul paramètre, dans ce cas un dictionnaire, où les clés sont les caractères à remplacer qui sont mappés sur des valeurs avec la valeur de remplacement des caractères. Il retourne une table de traduction à utiliser avec str.translate. Documentation complète pour str.maketrans

Le module string dans python contient des opérations de chaîne et des constantes courantes. string.whitespace est une constante qui renvoie une chaîne contenant tous les ASCII caractères considérés comme des espaces. Cela inclut les caractères espace, tabulation, saut de ligne, retour, saut de formulaire et tabulation verticale . Documentation complète pour chaîne

Dans la deuxième fonction, dict.fromkeys sert à créer un dictionnaire dans lequel les clés sont les caractères de la chaîne renvoyée par string.whitespace, chacun avec la valeur None. Documentation complète pour dict.fromkeys

0
R. Arctor