web-dev-qa-db-fra.com

Comment puis-je réduire les espaces?

Existe-t-il une fonction Python qui coupera les espaces (espaces et tabulations) d'une chaîne?

Exemple: \t example string\texample string

959
Chris

Espace blanc des deux côtés:

s = "  \t a string example\t  "
s = s.strip()

Espace blanc à droite:

s = s.rstrip()

Espace blanc à gauche:

s = s.lstrip()

Comme le fait remarquer thedz , vous pouvez fournir un argument pour supprimer les caractères arbitraires de l’une des fonctions suivantes:

s = s.strip(' \t\n\r')

Cela supprimera tout espace, \t, \n ou \r du côté gauche, du côté droit ou des deux côtés de la chaîne. 

Les exemples ci-dessus ne suppriment que les chaînes des côtés gauche et droit des chaînes. Si vous souhaitez également supprimer les caractères du milieu d'une chaîne, essayez re.sub:

import re
print re.sub('[\s+]', '', s)

Cela devrait imprimer:

astringexample
1448
James Thompson

La méthode Python trim s'appelle strip:

str.strip() #trim
str.lstrip() #ltrim
str.rstrip() #rtrim
63
gcb

Pour les espaces de début et de fin:

s = '   foo    \t   '
print s.strip() # prints "foo"

Sinon, une expression régulière fonctionne:

import re
pat = re.compile(r'\s+')
s = '  \t  foo   \t   bar \t  '
print pat.sub('', s) # prints "foobar"
22
ars

Vous pouvez également utiliser une fonction très simple et basique: str.replace () , fonctionne avec les espaces et les onglets:

>>> whitespaces = "   abcd ef gh ijkl       "
>>> tabs = "        abcde       fgh        ijkl"

>>> print whitespaces.replace(" ", "")
abcdefghijkl
>>> print tabs.replace(" ", "")
abcdefghijkl

Simple et facile.

18
Lucas
#how to trim a multi line string or a file

s=""" line one
\tline two\t
line three """

#line1 starts with a space, #2 starts and ends with a tab, #3 ends with a space.

s1=s.splitlines()
print s1
[' line one', '\tline two\t', 'line three ']

print [i.strip() for i in s1]
['line one', 'line two', 'line three']




#more details:

#we could also have used a forloop from the begining:
for line in s.splitlines():
    line=line.strip()
    process(line)

#we could also be reading a file line by line.. e.g. my_file=open(filename), or with open(filename) as myfile:
for line in my_file:
    line=line.strip()
    process(line)

#moot point: note splitlines() removed the newline characters, we can keep them by passing True:
#although split() will then remove them anyway..
s2=s.splitlines(True)
print s2
[' line one\n', '\tline two\t\n', 'line three ']
12
robert king

Personne n'a encore posté ces solutions de regex.

Correspondant à:

>>> import re
>>> p=re.compile('\\s*(.*\\S)?\\s*')

>>> m=p.match('  \t blah ')
>>> m.group(1)
'blah'

>>> m=p.match('  \tbl ah  \t ')
>>> m.group(1)
'bl ah'

>>> m=p.match('  \t  ')
>>> print m.group(1)
None

Recherche (vous devez gérer différemment le cas de saisie "espaces uniquement"):

>>> p1=re.compile('\\S.*\\S')

>>> m=p1.search('  \tblah  \t ')
>>> m.group()
'blah'

>>> m=p1.search('  \tbl ah  \t ')
>>> m.group()
'bl ah'

>>> m=p1.search('  \t  ')
>>> m.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

Si vous utilisez re.sub, vous pouvez supprimer les espaces intérieurs, ce qui peut être indésirable.

4
user1149913

(re.sub ('+', '', (my_str.replace ('\ n', '')))). strip ()

Cela supprimera tous les espaces indésirables et les caractères de nouvelle ligne. J'espère que cette aide

import re
my_str = '   a     b \n c   '
formatted_str = (re.sub(' +', ' ',(my_str.replace('\n',' ')))).strip()

Cela aura pour résultat:

'a b\n c' sera remplacé par 'a b c'

3
Safvan CK
    something = "\t  please_     \t remove_  all_    \n\n\n\nwhitespaces\n\t  "

    something = "".join(something.split())

sortie: please_remove_all_whitespaces

2
pbn

essayez de traduire

>>> import string
>>> print '\t\r\n  hello \r\n world \t\r\n'

  hello 
 world  
>>> tr = string.maketrans(string.whitespace, ' '*len(string.whitespace))
>>> '\t\r\n  hello \r\n world \t\r\n'.translate(tr)
'     hello    world    '
>>> '\t\r\n  hello \r\n world \t\r\n'.translate(tr).replace(' ', '')
'helloworld'
0
海洋顶端

Si vous utilisez Python 3: Dans votre déclaration print, terminez avec sep = "". Cela va séparer tous les espaces. 

EXEMPLE:

txt="potatoes"
print("I love ",txt,"",sep="")

Cela imprimera: J'aime les pommes de terre.

Au lieu de: J'adore les pommes de terre.

Dans votre cas, puisque vous essayez de vous en sortir, faites sep = "\ t"

0
morgansmnm

Si vous voulez couper les espaces uniquement au début et à la fin de la chaîne, vous pouvez faire quelque chose comme ceci:

some_string = "    Hello,    world!\n    "
new_string = some_string.strip()
# new_string is now "Hello,    world!"

Cela fonctionne beaucoup comme la méthode QString :: trimmed () de Qt, en ce sens qu’il supprime les espaces blancs de début et de fin, tout en laissant les espaces internes internes seuls.

Mais si vous souhaitez utiliser la méthode QString :: simplifiée () de Qt, qui non seulement supprime les espaces blancs de début et de fin, mais "ajoute" tous les espaces blancs consécutifs à un caractère d'espacement, vous pouvez utiliser une combinaison de .split() et " ".join, comme ce:

some_string = "\t    Hello,  \n\t  world!\n    "
new_string = " ".join(some_string.split())
# new_string is now "Hello, world!"

Dans ce dernier exemple, chaque séquence d’espaces blancs internes est remplacée par un seul espace, tout en réduisant les espaces blancs au début et à la fin de la chaîne.

0
J-L