我从文件中取出一行。 Row看起来像这样:
['(27.0, 168.0)', '(32.0, 550.0)', '(88.0, 835.0)', '(46.0, 660.0)', '(38.0, 430.0)', '(34.0, 285.0)', '(72.0, 701.0)', '(29.0, 434.0)', '(0, 2)']
有没有办法将这些字符串转换为元组?我试过x.strip() for x in row
,但它没有帮助。
提前致谢。
答案 0 :(得分:2)
这对你有用吗?
import ast
string = "['(27.0, 168.0)', '(32.0, 550.0)', '(88.0, 835.0)', '(46.0, 660.0)', '(38.0, 430.0)', '(34.0, 285.0)', '(72.0, 701.0)', '(29.0, 434.0)', '(0, 2)']"
string = string.replace("'", "")
string = ast.literal_eval(string)
输出结果为:
In : string
Out:
[(27.0, 168.0),
(32.0, 550.0),
(88.0, 835.0),
(46.0, 660.0),
(38.0, 430.0),
(34.0, 285.0),
(72.0, 701.0),
(29.0, 434.0),
(0, 2)]
In : type(string)
Out: list
In : [type(x) for x in string]
Out: [tuple, tuple, tuple, tuple, tuple, tuple, tuple, tuple, tuple]
如果我理解正确,ast
模块会评估我认为您正在寻找的字符串。
答案 1 :(得分:1)
这应该可以解决问题。
from ast import literal_eval as make_tuple
a = ['(27.0, 168.0)', '(32.0, 550.0)', '(88.0, 835.0)', '(46.0, 660.0)', '(38.0, 430.0)', '(34.0, 285.0)', '(72.0, 701.0)', '(29.0, 434.0)', '(0, 2)']
b = [make_tuple(x.strip()) for x in a]
答案 2 :(得分:0)
您可以使用eval
轻松完成。
# bad practice
a = ['(27.0, 168.0)', '(32.0, 550.0)', '(88.0, 835.0)', '(46.0, 660.0)', '(38.0, 430.0)', '(34.0, 285.0)', '(72.0, 701.0)', '(29.0, 434.0)', '(0, 2)']
b = [eval(tuple_str.strip()) for tuple_str in a]
<强>更新强>
正如您在下面的评论中所看到的,使用literal_eval
更安全。