将字符串转换为元组并添加到元组

时间:2010-10-15 20:25:14

标签: python string tuples

我有这样的配置文件。

[rects]
rect1=(2,2,10,10)
rect2=(12,8,2,10)

我需要遍历这些值并将它们转换为元组。 然后我需要像

那样制作一个元组元组
((2,2,10,10), (12,8,2,10))

5 个答案:

答案 0 :(得分:11)

您也可以使用ast模块的literal_eval函数,而不是使用正则表达式或int /字符串函数,该函数仅评估有效Python文字的字符串。这个功能是安全的(根据文档)。 http://docs.python.org/library/ast.html#ast.literal_eval

import ast
ast.literal_eval("(1,2,3,4)") # (1,2,3,4)

而且,正如其他人所说,ConfigParser可用于解析INI文件。

答案 1 :(得分:9)

要将字符串转换为整数元组(也就是我假设你想要的东西),你可以使用这样的正则表达式:

x = "(1,2,3)"
t = tuple(int(v) for v in re.findall("[0-9]+", x))

您可以使用configparser来解析配置文件。

答案 2 :(得分:3)

考虑到cp是具有配置的cfg文件的ConfigParser对象。

[rects]
rect1=(2,2,10,10)
rect2=(12,8,2,10)


>> import ast 
>> tuple(ast.literal_eval(v[1]) for v in cp.items('rects')) 
   ((2,2,10,10), (12,8,2,10))

编辑:将eval()更改为更安全的版本literal_eval()
        从python docs - literal_eval()执行以下操作:
            安全地评估表达式节点或包含Python的字符串             表达。提供的字符串或节点可能仅包含以下内容             Python文字结构:字符串,数字,元组,列表,dicts,布尔值,             没有

答案 3 :(得分:2)

你可以简单地创建像

这样的元组元组
new_tuple = (rect1,rect2) # ((2,2,10,10), (12,8,2,10))

如果要循环显示值

for i in rect1+rect2:
    print i

如果你想重新组合你可以做的数字

 tuple_regrouped = zip(rect1,rect2) #((2,12),(2,8),(10,2), (10,10))

编辑: 没有注意到字符串部分。如果您在字符串中有行,例如读取配置文件,则可以执行类似

的操作
 # line = "rect1 = (1,2,3,4)"
 config_dict = {}     
 var_name, tuple_as_str = line.replace(" ","").split("=")
 config_dict[var_name] = tuple([int(i) for i in tuple_as_str[1:-1].split(',')])
 # and now you'd have config_dict['rect1'] = (1,2,3,4)

答案 4 :(得分:2)

最简单的方法是使用Michael Foord的ConfigObject库。它有一个unrepr mode,可以直接将字符串转换为元组。