68 votes

Analyser un tuple à partir d'une chaîne ?

Disons que j'ai une chaîne de la même forme qu'un tuple devrait être, par exemple, "(1,2,3,4,5)" . Quel est le moyen le plus simple de convertir cela en un tuple réel ? Un exemple de ce que je veux faire est :

 tup_string = "(1,2,3,4,5)"
tup = make_tuple(tup_string)

Le simple fait d'exécuter tuple() sur la chaîne fait de l'ensemble un gros tuple, alors que ce que j'aimerais faire, c'est comprendre la chaîne comme un tuple. Je sais que je peux utiliser une regex pour cela, mais j'espérais qu'il existe un moyen moins coûteux. Des idées ?

142voto

Niklas B. Points 40619

Il existe déjà !

 >>> from ast import literal_eval as make_tuple
>>> make_tuple("(1,2,3,4,5)")
(1, 2, 3, 4, 5)

Soyez conscient du cas d'angle, cependant:

 >>> make_tuple("(1)")
1
>>> make_tuple("(1,)")
(1,)

Si votre format d'entrée fonctionne différemment de Python ici, vous devez gérer ce cas séparément ou utiliser une autre méthode telle que tuple(int(x) for x in tup_string[1:-1].split(',')) .

2voto

Shameem Points 1025

Vous pouvez analyser votre chaîne sans SyntaxError

 def parse_tuple(string):
    try:
        s = eval(string)
        if type(s) == tuple:
            return s
        return
    except:
        return

Cette fonction renvoie le Tuple si l'analyse est réussie. Sinon, retournez None .

 print parse_tuple("('A', 'B', 'C')")

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