向量转字符串,保存到文件再转回向量?Python

2 投票
2 回答
1611 浏览
提问于 2025-04-17 20:19

这是我第一次提问,抱歉我的英语不好。

我已经搜索过了,但嗯,我不知道怎么搜索,我尝试了不同的方法和关键词,但都没有找到。

问题是这样的:

我在用Python编写一些Blender的脚本,我想用配置解析器来保存和加载一些项目等等。但是比如说,如果我想保存一个颜色,在Blender中它是一个包含4个浮点数的向量,把这个向量放进配置解析器的文件里,显然会把它保存成字符串。例如(变量config是所有配置解析器的内容):

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

它会保存成这样:

[section]
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

你可以使用正则表达式,像这样:

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]
1

如果你想保存一个真实的对象,建议你保存一个列表,而不是把像"[1, 2, 3]"这样的内容写进文件里。我强烈推荐你看看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

'pickle'非常好用。可以查看官方的Python文档了解更多。

撰写回答