ho una stringa come questa "['first', 'sec', 'third']"
stringa di Python per elencare le migliori pratiche
Quale sarebbe il modo migliore per convertire questo in una lista di stringhe vale a dire. ['first', 'sec', 'third']
ho una stringa come questa "['first', 'sec', 'third']"
stringa di Python per elencare le migliori pratiche
Quale sarebbe il modo migliore per convertire questo in una lista di stringhe vale a dire. ['first', 'sec', 'third']
userei literal_eval()
, è sicuro:
sicura valutare un nodo un'espressione o una stringa contenente un'espressione Python . La stringa o il nodo fornito può consistere solo in seguenti strutture letterali Python: stringhe, numeri, tuple, elenchi, dicts, booleans e None.
Questo può essere utilizzato per valutare in modo sicuro le stringhe contenenti espressioni Python da fonti non attendibili senza la necessità di analizzare autonomamente i valori .
>>> import ast
>>> ast.literal_eval("['first', 'sec', 'third']")
['first', 'sec', 'third']
Essa non eval nulla, tranne le espressioni letterali:
>>> ast.literal_eval('"hello".upper()')
...
ValueError: malformed string
>>> ast.literal_eval('"hello"+" world"')
...
ValueError: malformed string
Grazie alecxe, ho usato questo, ma sono curioso di vedere cosa pensano le persone, altri metodi ecc. – Ruth
+1 - Questo è il modo migliore per farlo, poiché 'ast.literal_eval()' è sicuro, al contrario per 'eval()'. Detto questo, l'opzione migliore è probabilmente quella di archiviare i dati in un formato più standardizzato, se possibile. –
Se
stanno sempre formattati come dici tu
tutte le stringhe sono citati nello stesso modo, una semplice spaccatura dovrebbe farlo anche:
Questa soluzione è molto più fragile, in quanto supporterà solo un singolo quo stile.
È molto più veloce, però.
%timeit "['first', 'sec', 'third']".split("'")[1::2]
1000000 loops, best of 3: 726 ns per loop
%timeit ast.literal_eval("['first', 'sec', 'third']")
10000 loops, best of 3: 21.8 us per loop
Fantastico, ma se la lista fosse '" ['first', 'sec', 'third', \ "fourth \"] "' o anche 'L =" "" ['first', 'sec', ' terzo ', "quarto"] "" "' – TerryA
Bei esempi. Lascerò la risposta in diretta, spero che aiuti a mostrare perché literal_eval è la pratica migliore. –
Il modo migliore sarebbe utilizzare un formato di serializzazione noto, come json. –