Chaîne.strip() en Python

Pendant l'apprentissage de python, je suis tombé sur ce code, qui prend un fichier texte, divise chaque ligne dans un tableau, et l'insère dans un dictionnaire, 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 exécuté le programme avec les lignes commentées et s'éteint et j'ai obtenu le même résultat. (bien sûr, le remplacement de la deuxième ligne de commentaires avec la ligne ci-dessous).Il me semble que faire un strip() est facultatif. Est-il préférable de le laisser dans?

39
demandé sur igaurav 2012-10-22 18:37:21

5 réponses

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

.strip() sans arguments (ou None comme premier argument) supprime espaces au début et à la fin, y compris les espaces, les onglets, les nouvelles lignes et les retours de chariot. Le laisser dans ne fait pas de mal, et permet à votre programme de faire face à des espaces supplémentaires inattendus insérés dans le fichier.

par exemple, en utilisant .strip(), les deux lignes suivantes dans un fichier conduirait au même résultat:

 foo\tbar \n
foo\tbar\n

je dirais de le laisser dans.

60
répondu Martijn Pieters 2018-08-27 13:54:11

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

"foo\tbar "

Dans ce cas, si vous strip, alors vous aurez {"foo":"bar"} comme entrée du dictionnaire. Si vous ne vous déshabillez pas, vous aurez {"foo":"bar "} (notez l'espace supplémentaire à la fin)

Notez que si vous utilisez line.split() au lieu de line.split('\t'), vous vous diviserez sur chaque caractère d'espace et le "strip ing " sera fait lors de la séparation automatique. 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
répondu mgilson 2012-10-22 14:40:44

strip ne fait rien mais supprime l'espace dans votre chaîne. Si vous souhaitez supprimer le blanc supplémentaire de l'avant et de l'arrière de votre chaîne, vous pouvez utiliser strip.

la chaîne d'exemples qui peut illustrer ceci:

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

le Voir, même après la séparation avec \t il y a des espaces supplémentaires dans les premier et deuxième éléments qui peuvent être supprimés en utilisant strip dans votre code.

6
répondu Senthil Kumaran 2012-10-22 14:43:05

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

0
répondu zmbq 2012-10-22 14:40:46

Non, il est préférable de les laisser.

Sans strip(), vous pouvez avoir vide les clés et les valeurs:

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

Sans strip(), la banane est présent dans le dictionnaire, mais avec une chaîne vide comme valeur. Avec strip(), ce code lancera une exception car il supprime l'onglet de la ligne banana.

0
répondu Sjoerd 2012-10-22 14:41:17