Prévenir python de l'impression d'un retour à la ligne
J'ai ce code en Python
inputted = input("Enter in something: ")
print("Input is {0}, including the return".format(inputted))
que les sorties
Enter in something: something
Input is something
, including the return
Je ne suis pas sûr de ce qui se passe; si j'utilise des variables qui ne dépendent pas de la saisie de l'utilisateur, je n'ai pas le retour à la ligne après la mise en forme avec la variable. Je soupçonne Python prend peut-être dans le caractère de saut de ligne en entrée lorsque j'ai appuyé sur la touche retour.
Comment puis-je faire en sorte que l'entrée ne comprennent pas les retours à la ligne pour que je puisse le comparer à d'autres chaînes de caractères? (par exemple,something == 'a'
)
Quel système d'exploitation/version de Python que vous utilisez? Je ne peux pas reproduire cela avec Python 3.1.1 sur Win XP.
Python 3.1.1, Windows 7 avec Eclipse
À côté de la question, mais si l'impression d'appel se termine avec "le retour", ne faut-il pas la fin de la production avec "le retour", pas le "saut de ligne".
vous avez raison 🙂
double possible de Comment faire pour imprimer en Python sans retour à la ligne ou de l'espace?
Python 3.1.1, Windows 7 avec Eclipse
À côté de la question, mais si l'impression d'appel se termine avec "le retour", ne faut-il pas la fin de la production avec "le retour", pas le "saut de ligne".
vous avez raison 🙂
double possible de Comment faire pour imprimer en Python sans retour à la ligne ou de l'espace?
OriginalL'auteur wrongusername | 2010-03-20
Vous devez vous connecter pour publier un commentaire.
Vous êtes correct - un retour à la ligne est inclus dans
inputted
. Pour le supprimer, vous pouvez les appelerstrip("\r\n")
pour supprimer le saut de ligne à partir de la fin:Cela ne causera pas de problèmes si
inputted
ne pas avoir un retour chariot à la fin, mais qui permettra de supprimer ceux qui sont là, donc vous pouvez utiliser ce queinputted
est saisie de l'utilisateur ou non.Si vous ne voulez pas tout retours à la ligne dans le texte, vous pouvez utiliser
inputted.replace("\r\n", "")
pour supprimer tous les retours à la ligne.Ensuite, essayez de décapage '\r' au lieu de '\n'. Votre terminal probablement envoie '\r\n' lorsque le script s'attend à ce '\n' seul.
Ah, merci Jacek! Qui en fait trop! 🙂
Intéressant - Python normalement supprime tous les retours à la ligne avec juste
"\n"
, ou, au moins, je le croyais (python.org/dev/peps/pep-0278). Je vais modifier à la bande \r\n, qui doit faire les deux.Un nit: rstrip() est préféré à strip() ici: strip() supprime par les deux bouts. Il est vrai que vous savez il n'y a pas extra retours à la ligne au début, mais pourquoi ne pas dire ce que tu veux dire?
OriginalL'auteur Daniel G
Votre problème est en fait de l'Éclipse. En supposant que vous utilisez PyDev, j'ai été en mesure de reproduire le problème. Lors de la saisie de quelque chose dans l'Eclipse de la console, le problème se produit comme décrit dans votre question. Mais quand il s'agit de l'exécution de la même script avec Python 3.1.1 interprète,
inputted
ne comprend pas un caractère de saut de ligne.J'ai étudié le code source Python et découvert
input()
utilise GNU readline si stdin est interactif (c'est à dire un ATS ou de l'invite, cependant vous voulez l'appeler), mais revient à la.readline()
méthode de la stdin objet, si nécessaire. Ensuite, si le résultat dereadline
se termine avec\n
, ce caractère est supprimé. Note: Pas de CR-LF LF ou CR ici la gestion (dans le cas de secours)!J'ai donc écrit ce petit script pour voir ce qui se passe réellement:
Il exécute pour la première fois le code avec la normale de stdin (console ou de l'Éclipse de la console), puis avec un prêt stdin contenant le texte
test\r\ntest\r\n
.Essayer et exécuter le script dans Eclipse, vous devez entrer une chaîne de caractères à deux reprises. La conclusion: en Appuyant sur Entrée dans l'Eclipse de la console va produire CR-LF ("\r\n"). L'impression "\r" dans l'Eclipse de la console va passer à la ligne suivante.
De l'autre côté, de l'exécuter dans la console Windows va produire le résultat attendu:
input()
retourne une chaîne de caractères sans un retour à la ligne à la fin parce que (je suppose) GNU readline est utilisée. Préparé avec la stdinStringIO("test\r\n")
, leinput()
résultat est "test\r" comme dans Eclipse (mais pas à l'impression que le saut de ligne).Espère que cela prend tout son sens... mais ce que je ne sais toujours pas si c'est le comportement attendu d'Eclipse.
OriginalL'auteur AndiDog
Si vous ne voulez stript la dernière ligne de fin, vous pouvez utiliser rstrip.
inputted.rstrip ("\r\n")
OriginalL'auteur evilpie
Edit: Comme indiqué, cela tuera tous les espaces au début et à la fin. Un moyen de se débarrasser de fin du retour à la ligne est:
Vrai. Modifié pour refléter cela.
faux, en fait - comment est-ce que le premier "pas" la dedans? Putain!
En fait, calmh la méthode a fonctionné aussi.
Je mentalement corrigé le "pas". 😉
OriginalL'auteur Jakob Borg