347 votes

Comment puis-je partager un mult-ligne de chaîne de caractères sur plusieurs lignes?

J'ai un multi-ligne de chaîne littérale que je veux faire une opération sur chaque ligne, comme si.

inputString = """Line 1
Line 2
Line 3"""

Je veux faire quelque chose comme ce qui suit.

for line in inputString:
    doStuff()

526voto

UnkwnTech Points 21942
inputString.splitlines()

Vous donnera un tableau avec chaque élément, l' splitlines() méthode est conçu pour diviser chaque ligne dans un élément du tableau.

202voto

efotinis Points 6338

Comme les autres ont dit:

inputString.split('\n')  # --> ['Line 1', 'Line 2', 'Line 3']

C'est identique au précédent, mais la chaîne de fonctions du module sont obsolètes et doivent être évités:

import string
string.split(inputString, '\n')  # --> ['Line 1', 'Line 2', 'Line 3']

Alternativement, si vous souhaitez que chaque ligne afin d'inclure la séquence de saut (CR,LF,CRLF), utilisez la splitlines méthode avec un Vrai argument:

inputString.splitlines(True)  # --> ['Line 1\n', 'Line 2\n', 'Line 3']

60voto

goncalopp Points 4975

La meilleure façon de le faire est de simplement utiliser str.splitlines.

Bien que, à première vue, cela peut sembler le même que le fait de faire split('\n'), ils ont des comportements différents.

\n sur python représente un Unix saut de ligne, indépendamment de la plate-forme où vous l'exécutez. Cependant, le saut de ligne est la représentation dépend de la plateforme. Sur windows, \n est deux personnages, CR et LF (décimal ASCII codes 13 et 10, aka \r et \n), alors que sur tous les Unix (y compris OS X), c'est le caractère LF.

print, par exemple, fonctionne correctement même si vous avez une chaîne avec des fins de ligne qui ne correspondent pas à votre plate-forme:

>>> print " a \n b \r\n c "
 a 
 b 
 c

Cependant, explicitement fractionnement "\n" rendement dépend de la plateforme de comportement:

>>> " a \n b \r\n c ".split("\n")
[' a ', ' b \r', ' c ']

Pour cette raison, il est préférable d'utiliser des splitlines:

>>> " a \n b \r\n c ".splitlines()
[' a ', ' b ', ' c ']

21voto

1_CR Points 11848

Peut-être exagéré dans ce cas particulier, mais une autre option consiste à utiliser StringIO créer un fichier objet en forme de

for line in StringIO.StringIO(inputString):
    doStuff()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X