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

5 投票
5 回答
14271 浏览
提问于 2025-04-16 05:34

我有一个这样的配置文件。

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

我需要遍历这些值,把它们转换成元组。然后我还需要把这些元组放在一起,形成一个包含多个元组的元组,像这样:

((2,2,10,10), (12,8,2,10))

5 个回答

3

这里提到的cp是一个ConfigParser对象,用来处理配置文件(cfg文件)。

[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文档,literal_eval()的作用是:
安全地评估一个表达式节点或包含Python表达式的字符串。提供的字符串或节点只能由以下Python基本结构组成:字符串、数字、元组、列表、字典、布尔值和None

11

你可以用 ast 模块里的 literal_eval 函数来代替正则表达式或者整数/字符串的函数。这个函数只会处理那些有效的 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 文件。

9

如果你想把字符串转换成整数的元组(我想这就是你想要的),你可以使用像这样的正则表达式:

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

你还可以使用,比如说,configparser 来解析配置文件。

撰写回答