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'
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'
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.
>>> 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).
Alternativement
"strip my spaces".translate( None, string.whitespace )
Et voici la version Python3:
"strip my spaces".translate(str.maketrans('', '', string.whitespace))
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")
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(" ", "")
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 .
import re
re.sub(' ','','strip my spaces')
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
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
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