矢量字符串,保存在文件中,再次矢量?蟒蛇

时间:2014-02-27 00:16:49

标签: python string vector

这是我的第一个问题,对不起我的英语。

我已经搜索过,但嗯,我不知道如何搜索,我尝试不同的方式和关键字,但没有。

问题在于:

我正在使用python在blender中做一些脚本,我想使用配置解析器来保存和加载项目等。但是例如,如果我想保存颜色,那在搅拌机中是4个浮动位置的Vector,将矢量放在带有配置解析器的文件中,它显然在文件中保存了一个字符串,例子(变量配置是所有配置解析器的东西):

vector_color = [ 0.1, 0.8, 0.2, 1.0 ]
config.set("section", "item", vector_color)

它会保存这个:

  

[第]
  item =< Vector(0.1,0.8,0.2,1.0)>

这是一件好事,因为它存储了矢量,但现在..问题,我想加载矢量,我怎么能这样做?这就是我的问题,因为如果我像向量一样加载它,它是一个字符串,所以..我怎么能再次将它转换为向量?我用eval(),literal_eval(),config.read_string()证明,我不知道我用很多可能的函数来证明。

所以,用更少的话来说:

我怎么能转换这个字符串:

"<Vector (0.1, 0.8, 0.2, 1.0)>"

到这个载体

[0.1, 0.8, 0.2, 1.0]

2 个答案:

答案 0 :(得分:1)

如果您需要保存实际对象 - 保存列表而不是带有字符&#34; [1,2,3]&#34;在其中 - 我强烈建议您查看pickle

import pickle

my_list = [1, 1, 2, 3, 5]
pickled_list = pickle.dumps(my_list)
f = open('my_file.py', 'w')
f.write(pickled_list)
f.close()

#a wild coding appears...
#you used python... it's super effective

f = open('my_file.py', 'r')
read_file = f.read()
my_loaded_list = pickle.loads(read_file)
f.close()

my_loaded_list ##should be the list you just saved

&#39;泡菜&#39;是很棒的。查看官方Python文档。

答案 1 :(得分:0)

您可以使用正则表达式,如下所示:

import re

s = "<Vector (0.1, 0.8, 0.2, 1.0)>"
v = [float(x.group()) for x in re.finditer('\d.\d', s)]

# v = [0.1, 0.8, 0.2, 1.0]