Supprimer les espaces / tabulations / retours à la ligne - Python

94

J'essaie de supprimer tous les espaces / onglets / nouvelles lignes en 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

production:

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. Dois-je importer quelque chose?

bachurim09
la source
Découvrez la réponse à cette question connexe: stackoverflow.com/questions/1185524/… strip () supprime uniquement les caractères de début et de fin, pas TOUS les caractères.
dckrooney
1
pourrait être utile: stackoverflow.com/questions/8928557/…
newtover
1
Cela a fonctionné pour moi, à partir de: [Comment couper les espaces (y compris les tabulations)?] [1] s = s.strip ('\ t \ n \ r') [1]: stackoverflow.com/questions/1185524/...
stamat le

Réponses:

124

Utiliser str.split([sep[, maxsplit]])sans sepousep=None :

À partir de la documentation :

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

Démo:

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

Utilisez str.joinsur la liste renvoyée pour obtenir cette sortie:

>>> ' '.join(myString.split())
'I want to Remove all white spaces, new lines and tabs'
Ashwini Chaudhary
la source
57

Si vous souhaitez supprimer plusieurs éléments d'espaces et les remplacer par des espaces simples, le moyen le plus simple est d'utiliser une expression rationnelle comme 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.

MattH
la source
13

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

Production:

Je veux supprimer tous les espaces blancs, les nouvelles lignes et les onglets

Shivam K. Thakkar
la source
1
Ceci est une correction de la réponse originale donnée par @ TheGr8Adakron, pas un double
Jesuisme
12
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
Manish Mulani
la source
4
cela supprime également «;»
janvier
10

Cela supprimera uniquement 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)

PRODUCTION:

IwantoRemoveallwhiespaces, newlinesettabs

Bonne journée!

L'Adakron Gr8
la source
1
Merci pour la solution - je pense qu'une correction mineure est nécessaire, elle devrait être «+» au lieu de «*».
Sajad Karim
5

Les solutions ci-dessus suggérant l'utilisation de regex ne sont pas idéales car c'est une tâche si petite et regex nécessite plus de ressources supplémentaires que la simplicité de la tâche ne le justifie.

Voici ce que je fais:

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

ou si vous aviez un tas de choses à supprimer de telle sorte qu'une solution sur une seule ligne serait gratuitement longue:

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

Puisqu'il n'y a rien d'autre qui soit plus complexe, je voulais partager ceci car cela m'a aidé.

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

import requests
import re

url = '/programming/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 indésirable:

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

Voici ce que j'ai changé en:

import requests
import re

url = '/programming/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>

Le regex précis que @MattH avait mentionné, était ce qui a fonctionné pour moi en l'ajustant à mon code. Merci!

Remarque: c'est python3

JayRizzo
la source