web-dev-qa-db-fra.com

Strip strip/tabs/newlines - python

J'essaie de supprimer tous les espaces/tabs/nouvelles lignes dans Python 2.7 sous Linux.

J'ai écrit ceci, cela devrait faire le travail: 

myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = myString.strip(' \n\t')
print myString

sortie:

I want to Remove all white   spaces, new lines 
 and tabs

Cela semble être une chose simple à faire, mais il me manque quelque chose ici. Devrais-je importer quelque chose?

54
bachurim09

Utilisez str.split([sep[, maxsplit]]) sans sep ni sep=None:

De docs :

Si sep n'est pas spécifié ou est None, un algorithme de fractionnement différent est Appliqué: les espaces blancs consécutifs sont considérés comme un seul séparateur, et le résultat ne contiendra aucune chaîne vide au début ou fin si la chaîne a des espaces de début ou de fin.

Démo:

>>> myString.split()
['I', 'want', 'to', 'Remove', 'all', 'white', 'spaces,', 'new', 'lines', 'and', 'tabs']

Utilisez str.join sur la liste renvoyée pour obtenir ce résultat:

>>> ' '.join(myString.split())
'I want to Remove all white spaces, new lines and tabs'
97

Si vous souhaitez supprimer plusieurs espaces et les remplacer par des espaces simples, le moyen le plus simple consiste à utiliser une expression rationnelle semblable à celle-ci:

>>> import re
>>> myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
>>> re.sub('\s+',' ',myString)
'I want to Remove all white spaces, new lines and tabs '

Vous pouvez ensuite supprimer l'espace de fin avec .strip() si vous le souhaitez.

35
MattH
import re

mystr = "I want to Remove all white \t spaces, new lines \n and tabs \t"
print re.sub(r"\W", "", mystr)

Output : IwanttoRemoveallwhitespacesnewlinesandtabs
10
Manish Mulani

Découvrez la réponse à cette question: Comment couper les espaces (y compris les onglets)?

strip () supprime uniquement les caractères de début et de fin, pas TOUS les caractères.

6
dckrooney

Utilisez la bibliothèque re

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = re.sub(r"[\n\t\s]*", "", myString)
print myString

Sortie:

IwanttoRemoveallwhitesspaces, newlinesandtabs

6
Shivam K Thakkar

Cela ne fera que supprimer l'onglet, les nouvelles lignes, les espaces et rien d'autre.

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
output   = re.sub(r"[\n\t\s]*", "", myString)

OUTPUT: 

IwantoRemoveall Whiespaces, newlinesandtabs

Bonne journée!

1
The Gr8 Adakron

Puisqu'il n'y a rien d'autre qui soit plus complexe, j'ai voulu partager ceci car cela m'aidait.

C'est ce que j'ai utilisé à l'origine:

import requests
import re

url = 'https://stackoverflow.com/questions/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print("{}".format(r.content))

Résultat non souhaité:

b'<!DOCTYPE html>\r\n\r\n\r\n    <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive">\r\n\r\n    <head>\r\n\r\n        <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>\r\n        <link

C'est ce que j'ai changé pour:

import requests
import re

url = 'https://stackoverflow.com/questions/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
regex = r'\s+'
print("CNT: {}".format(re.sub(regex, " ", r.content.decode('utf-8'))))

Résultat désiré:

<!DOCTYPE html> <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive"> <head> <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>

La regex précise mentionnée par @MattH était ce qui a bien fonctionné pour l’intégrer dans mon code. Merci!

Note: Ceci est python3

0
JayRizzo

Les solutions ci-dessus suggérant l'utilisation de regex ne sont pas idéales car il s'agit d'une tâche si petite et que les regex nécessitent davantage de ressources que ne le justifie la simplicité de la tâche.

Voici ce que je fais:

myString = myString.replace(' ', '').replace('\t', '').replace('\n', '')

ou si vous aviez un tas de choses à enlever telles qu'une solution à une seule ligne serait longue gratuitement:

removal_list = [' ', '\t', '\n']
for s in removal_list:
  myString = myString.replace(s, '')
0
rosstripi