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?


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
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'

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.


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


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

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!


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, '')

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.