web-dev-qa-db-fra.com

String.strip () in Python

En apprenant à propos de python, je suis tombé sur ce code, qui prend un fichier texte, divise chaque ligne en un tableau et l'insère dans un dictionnaire personnalisé, où le tableau [0] est la clé et le tableau [1] est la valeur:

my_dict = {}

infile = open("file.txt")
for line in infile:
    #line = line.strip() 
    #parts = [p.strip() for p in line.split("\t")]
    parts = [p for p in line.split("\t")]
    my_dict[parts[0]] = parts[1]
    print line

for key in my_dict:
    print "key: " + key + "\t" + "value " + my_dict[key]

J'ai lancé le programme avec les lignes commentées de temps en temps et j'ai obtenu le même résultat. (Bien sûr, remplacer la deuxième ligne commentée par la ligne en dessous). Il me semble que faire un strip () est optionnel. Est-il préférable de le laisser dedans?

43
Rhs

Si vous pouvez commenter le code et que votre programme fonctionne toujours, alors oui, ce code était facultatif.

.strip() sans argument (ou None comme premier argument) supprime tous les espaces au début et à la fin, y compris les espaces, les tabulations, les nouvelles lignes et les retours à la ligne. Le laisser dedans ne fait pas de mal et permet à votre programme de gérer les espaces supplémentaires inattendus insérés dans le fichier.

Par exemple, en utilisant .strip(), les deux lignes suivantes d'un fichier conduiraient au même résultat final:

 foo\tbar \n
foo\tbar\n

Je dirais le laisser dedans.

62
Martijn Pieters

Dans ce cas, vous pourriez avoir quelques différences. Considérez une ligne comme:

"foo\tbar "

Dans ce cas, si vous strip, vous obtiendrez {"foo":"bar"} Comme entrée de dictionnaire. Si vous ne déshabillez pas, vous obtiendrez {"foo":"bar "} (Notez l'espace supplémentaire à la fin)

Notez que si vous utilisez line.split() au lieu de line.split('\t'), vous scindez chaque caractère blanc et le "striping" sera automatiquement créé lors de la scission. En d'autres termes:

line.strip().split()

est toujours identique à:

line.split()

mais:

line.strip().split(delimiter)

N’est pas nécessairement équivalent à:

line.split(delimiter)
13
mgilson

strip ne fait rien mais supprime les espaces dans votre chaîne. Si vous souhaitez supprimer les espaces blancs supplémentaires à l'avant et à l'arrière de votre chaîne, vous pouvez utiliser strip.

La chaîne d'exemple qui peut illustrer ceci est la suivante:

In [2]: x = "something \t like     \t this"
In [4]: x.split('\t')
Out[4]: ['something ', ' like     ', ' this']

Vous voyez, même après avoir séparé avec \t il y a des espaces supplémentaires dans les premier et deuxième éléments qui peuvent être supprimés à l’aide de strip dans votre code.

8
Senthil Kumaran

strip supprime les espaces du début et de la fin de la chaîne. Si vous voulez les espaces, n'appelez pas strip.

0
zmbq

Non, il vaut mieux les laisser de côté.

Sans strip (), vous pouvez avoir des clés et des valeurs vides:

apples<tab>round, fruity things
oranges<tab>round, fruity things
bananas<tab>

Sans strip (), la banane est présente dans le dictionnaire mais avec une chaîne vide comme valeur. Avec strip (), ce code lève une exception car il coupe l’onglet de la ligne banane.

0
Sjoerd