web-dev-qa-db-fra.com

Concaténer des chaînes en python dans plusieurs lignes

J'ai quelques chaînes à concaténer et la chaîne résultante sera assez longue. J'ai aussi quelques variables à concaténer.

Comment puis-je combiner des chaînes et des variables afin que le résultat soit une chaîne de plusieurs lignes?

Le code suivant génère une erreur.

str = "This is a line" +
       str1 +
       "This is line 2" +
       str2 +
       "This is line 3" ;

J'ai aussi essayé ça

str = "This is a line" \
      str1 \
      "This is line 2" \
      str2 \
      "This is line 3" ;

S'il vous plaît suggérer un moyen de le faire.

18
user3290349

Il y a plusieurs façons. Une solution simple consiste à ajouter des parenthèses:

strz = ("This is a line" +
       str1 +
       "This is line 2" +
       str2 +
       "This is line 3")

Si vous voulez chaque "ligne" sur une ligne séparée, vous pouvez ajouter des caractères de nouvelle ligne:

strz = ("This is a line\n" +
       str1 + "\n" +
       "This is line 2\n" +
       str2 + "\n" +
       "This is line 3\n")
35
Bryan Oakley

Python n'est pas php et vous n'avez pas besoin de mettre $ avant un nom de variable.

a_str = """This is a line
       {str1}
       This is line 2
       {str2}
       This is line 3""".format(str1="blabla", str2="blablabla2")
9
Diogo Martins

Python 3: Chaînes formatées

Depuis Python 3.6, vous pouvez utiliser des "chaînes formatées" (ou "chaînes f") pour insérer facilement des variables dans vos chaînes. Ajoutez simplement une f devant la chaîne et écrivez la variable entre accolades ({}) comme suit:

>>> name = "John Doe"
>>> f"Hello {name}"
'Hello John Doe'

Pour diviser une longue chaîne en plusieurs lignes, entourez les parties avec parenthèses (()) ou utilisez une chaîne multi-ligne (chaîne entourée de trois guillemets """ ou ''' au lieu d'un).

1. parenthèses

Avec des parenthèses autour de vos chaînes, vous pouvez même les concaténer sans qu'il soit nécessaire de vous connecter + entre:

a_str = (f"This is a line \n{str1}\n"
         f"This is line 2 \n{str2}\n"
         "This is line 3") # no variable here, so no leading f

Bon à savoir: S'il n'y a pas de variable dans une ligne, il n'est pas nécessaire d'indiquer une f en tête pour cette ligne.

Bon à savoir: Vous pouvez archiver le même résultat avec des barres obliques inverses (\) à la fin de chaque ligne au lieu des parenthèses mais en conséquence, PEP8 vous devriez préférer les parenthèses pour la continuation de la ligne:

Les lignes longues peuvent être fractionnées sur plusieurs lignes en encapsulant les expressions entre parenthèses. Ceux-ci doivent être utilisés de préférence à l'aide d'une barre oblique inverse pour la continuation de la ligne.

2. Chaîne multiligne

Dans les chaînes multilignes, vous n'avez pas besoin d'insérer explicitement \n, Python s'en charge pour vous:

a_str = f"""This is a line
        {str1}
        This is line 2
        {str2}
        This is line 3"""

Bon à savoir: Assurez-vous d’aligner correctement votre code, sinon vous aurez un espace blanc au début de chaque ligne.


En passant: vous ne devriez pas appeler votre variable str car c'est le nom du type de données lui-même.

Sources pour les chaînes formatées:

1
winklerrr

J'ajoute tout ce dont j'ai besoin pour concaténer une liste, puis la rejoindre lors d'un saut de ligne.

my_str = '\n'.join(['string1', variable1, 'string2', variable2])
1
Dušan Maďar