将字符串转换为元组

时间:2015-07-07 15:20:58

标签: python string parsing pygame tuples

我从文件中读取了一些元组数据。元组采用字符串形式,例如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 个答案:

答案 0 :(得分:4)

您可以使用ast模块的literal_eval

  

AST。的 literal_eval node_or_string

     

安全地评估表达式节点或包含Python文字或容器显示的Unicode或Latin-1编码字符串。提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None。

示例:

>>> import ast
>>> ast.literal_eval("(255, 0, 0)")
(255, 0, 0)
>>>

关于pygame,请注意Color class也可以将颜色的名称作为字符串:

>>> import pygame
>>> pygame.color.Color('RED')
(255, 0, 0, 255)
>>>

所以也许你通常可以简化你的代码。

另外,您不应该为dict Color命名,因为pygame中已经有Color类,这只会导致混淆。

答案 1 :(得分:2)

您可以使用ast.literal_eval() -

示例 -

import ast
ast.literal_eval('(255,0,0)')
>>> (255, 0, 0)

在你的情况下 -

gameDisplay.fill(ast.literal_eval(Color["RED"]))

请注意,ast.literal_eval将评估表达式(字符串)并返回结果。

来自documentation -

  

ast.literal_eval(node_or_string)

     

安全地评估表达式节点或包含Python文字或容器显示的Unicode或Latin-1编码字符串。提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None。

答案 2 :(得分:0)

其他答案使用ast模块,但使用内置函数eval可以完成同样的事情。

>>> mystring = '(255,0,0)'
>>> eval(mystring)
(255,0,0)

See the docs for more info.