Преобразовать строку в кортеж

Я прочитал некоторые данные кортежа из файла. Кортежи в строковой форме, например 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)
>>>

так что, возможно, вы могли бы вообще упростить свой код.

Кроме того, вы не должны называть свой dictColor, так как уже есть 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)

Смотрите документы для получения дополнительной информации.

Другие вопросы по тегам