Преобразовать строку в кортеж
Я прочитал некоторые данные кортежа из файла. Кортежи в строковой форме, например Color["RED"] = '(255,0,0)'
, Как я могу преобразовать эти строки в реальные кортежи?
Я хочу использовать эти данные в PyGame следующим образом:
gameDisplay.fill(Color["RED"])
# but it doesn't have the right data right now:
gameDisplay.fill('(255,0,0)')
3 ответа
Вы могли бы использовать literal_eval
из ast
модуль:
аст. literal_eval (node_or_string)
Безопасно оцените узел выражения или строку в кодировке Unicode или Latin-1, содержащую литерал Python или отображение контейнера. Предоставленная строка или узел могут состоять только из следующих литеральных структур Python: строк, чисел, кортежей, списков, диктов, логических значений и None.
Пример:
>>> import ast
>>> ast.literal_eval("(255, 0, 0)")
(255, 0, 0)
>>>
Что касается Pygame, обратите внимание, что Color
Класс также может принимать имя цвета в виде строки:
>>> import pygame
>>> pygame.color.Color('RED')
(255, 0, 0, 255)
>>>
так что, возможно, вы могли бы вообще упростить свой код.
Кроме того, вы не должны называть свой dict
Color
, так как уже есть Color
класс в пигме, и это только приведет к путанице.
Ты можешь использовать ast.literal_eval()
-
Пример -
import ast
ast.literal_eval('(255,0,0)')
>>> (255, 0, 0)
В твоем случае -
gameDisplay.fill(ast.literal_eval(Color["RED"]))
Обратите внимание, что ast.literal_eval оценит выражение (которое является строкой) и вернет результат.
Из документации -
ast.literal_eval (node_or_string)
Безопасно оцените узел выражения или строку в кодировке Unicode или Latin-1, содержащую литерал Python или отображение контейнера. Предоставленная строка или узел могут состоять только из следующих литеральных структур Python: строк, чисел, кортежей, списков, диктов, логических значений и None.
Другие ответы используют ast
модуль, но то же самое можно сделать с помощью встроенной функции eval
,
>>> mystring = '(255,0,0)'
>>> eval(mystring)
(255,0,0)