Python >> Tutoriel Python >  >> Python

Comment formater une chaîne contenant des accolades en Python ?

Résumé : Utilisez l'une des méthodes suivantes pour formater les chaînes contenant des accolades :

  • Utilisez des accolades doubles {{}}
  • Utilisez l'ancien format de chaîne, c'est-à-dire l'opérateur %
  • Utiliser la bibliothèque JSON
  • Utiliser des chaînes de modèle

Problème : Étant donné une chaîne littérale avec des accolades ; comment formater la chaîne et s'assurer que les accolades sont disponibles dans la sortie ?

Pour comprendre l'énoncé du problème, regardons l'exemple suivant :

Exemple :

x = "{Serial No.}{0} ".format(1)
print(x)

Sortie :

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    x = "{Serial No.}{0} ".format(1)
KeyError: 'Serial No'

Vous pouvez essayer vous-même dans le shell Python interactif :

Exercice :Lisez l'article et corrigez le bug !

De l'exemple ci-dessus, il est clair que lorsque nous exécutons un print avec un texte littéral contenant les accolades, le programme lève un KeyError sauf si nous fournissons la syntaxe appropriée pour le formatage des chaînes. Dans cet article, nous discuterons des méthodes pour surmonter ce problème et imprimer notre texte avec les accolades avec le formatage de chaîne. Par conséquent :

Résultat souhaité :

{Serial No:}1

Avant de plonger dans les solutions, examinons la raison derrière le KeyError exception.

Exception KeyError

Un KeyError est déclenché lorsque vous essayez d'accéder ou de rechercher une valeur dans un dictionnaire qui n'existe pas. Par exemple, considérez le dictionnaire suivant :

profile={
  'Name':'Shubham',
  'id':12345
}
print(profile['age'])

Le code ci-dessus lèvera un KeyError exception. C'est parce que nous essayons d'accéder à la clé 'age ' qui n'existe pas dans le dictionnaire profile . Comme la clé n'existe pas, nous ne pouvons accéder à aucune valeur à l'aide de cette clé.

Voici ce que nous obtenons lorsque nous exécutons le programme ci-dessus :

Traceback (most recent call last):
  File "main.py", line 8, in <module>
    print(profile['age'])
KeyError: 'age'

Non, la question qui doit être posée est :"Pourquoi obtenons-nous le KeyEror ? lors du formatage d'une chaîne qui contient un texte avec des accolades ?"

Raison : Le .format() s'attend généralement à ce que les éléments à l'intérieur de { } soient des clés, mais dans ce cas, il est incapable de le faire car 'Serial No.' n'est pas une clé. Donc .format() incapable d'analyser les données. Cela se traduit par un KeyError car nous essayons d'accéder à une clé-valeur qui n'existe pas.

Maintenant que nous savons pourquoi nous obtenons le KeyError plongeons dans les solutions pour éviter cette erreur.

Méthode 1 :Utiliser des accolades doubles

Nous avons déjà expliqué que {} à l'intérieur d'une chaîne de format sont des caractères spéciaux, donc si nous voulons inclure des accolades dans notre texte littéral, nous devons dire à l'analyseur de chaîne .format que les accolades données doivent être échappées et considérées comme un partie du littéral de texte donné. Cela peut être facilement fait en doublant les accolades entourant la chaîne, c'est-à-dire en utilisant la syntaxe suivante : {{Serial No.}}

Le programme suivant indique comment nous pouvons utiliser des accolades doubles pour atteindre notre solution :

x = "{{Serial No.}}{0} ".format(1)
print(x)

Sortie :

{Serial No.}1 

Méthode 2 :Utilisation de l'ancien style de formatage de chaîne (%)

Si vous ne souhaitez pas utiliser les accolades doubles, vous pouvez opter pour l'ancien style de formatage de chaîne qui utilise le modulo (%) opérateur. Jetons un coup d'œil au programme suivant pour comprendre comment nous pouvons utiliser l'opérateur modulo pour imprimer notre chaîne avec des accolades.

x = " {Serial No.}%s"
print (x%(1)) 

Sortie

{Serial No.}1

Méthode 3 :Utilisation de la bibliothèque JSON

Dans les situations où vous devez gérer des JSON complexes chaînes, la méthode la plus efficace pour gérer de tels scénarios consiste à utiliser le JSON bibliothèque dans votre programme.

★ Le json.dumps() est utilisée pour convertir un objet Python, comme un dictionnaire, en une chaîne JSON.

Considérez l'exemple suivant qui explique comment nous pouvons utiliser la bibliothèque JSON pour imprimer des chaînes JSON :

import json


group = "Admin"
id = 1111
x = {"ID" : id, "Group" : group}
print(json.dumps(x))

Sortie :

{"ID": 1111, "Group": "Admin"}

Jetez un œil à l'extrait de code ci-dessous pour comparer et contraster la complexité et le désordre de la syntaxe lorsque nous essayons d'imprimer la même chaîne en utilisant {{}} dans notre programme.

group = "Admin"
id = 1111
print('{{"ID": {}, "Group": {}}}'.format(id,group))

Sortie :

{"ID": 1111, "Group": Admin}

Méthode 4 :Utilisation de chaînes de modèle

Les chaînes de modèle sont utilisées pour fournir des substitutions de chaînes. Si vous voulez éviter les accolades supplémentaires et les substitutions basées sur %, vous pouvez utiliser le Template classe du string module.

★ Le substitute() La méthode effectue une substitution de modèle et renvoie une nouvelle chaîne.

Avis de non-responsabilité : Cela peut être un peu déroutant et sujet à plusieurs exceptions s'il n'est pas utilisé correctement, c'est pourquoi je ne vous recommande personnellement pas d'utiliser cette procédure à moins que cela ne soit absolument nécessaire.

Examinons le programme suivant pour comprendre l'utilisation de Template chaînes :

from string import Template
x = Template("$open Serial No: $close")
x = x.substitute(open='{',close='}')
print('{} {}'.format(x,1))

Sortie :

{ Serial No: } 1

EXERCICE

Maintenant, mettons nos mains dans le cambouis et pratiquons un peu de codage. Pouvez-vous deviner le résultat de l'extrait suivant ?

Remarque :Assurez-vous de suivre les commentaires dans l'extrait donné, ce qui débloquera un concept important pour vous !

greet = "HELLO FINXTER"
name = input("Enter Your Name: ")
age = input("Enter Your Age:")
print("\n")
#  to resolve an expression in the brackets instead of using literal text use three sets of curly braces
print(f"{{{greet.lower()}}} {name}")
print('{{You are {} years old!}}'.format(age))

Conclusion

Dans cet article, nous avons discuté de différentes méthodes pour formater une chaîne contenant des accolades en Python. Franchement, les accolades doubles sont la solution la plus simple tandis que l'utilisation de la bibliothèque JSON est la méthode la plus efficace pour traiter des données JSON complexes. Cependant, vous êtes toujours libre d'utiliser n'importe quelle méthode qui convient à vos besoins et la meilleure façon de maîtriser toutes ces techniques est de les pratiquer. Alors sans plus tarder, essayez-les dans votre système et n'hésitez pas à laisser tomber les requêtes.

Veuillez vous abonner et rester à l'écoute pour d'autres articles intéressants !