str = [ 3.82133931e-01 4.27354313e-02 1.94678816e-03 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 3.61185198e-06 1.26606241e-01 1.18472360e-01]
上面的字符串已经从数据库文本字段中检索到了,我试图将其转换回浮动列表,但无论我尝试什么,我似乎都无法摆脱方括号
floatList = []
for k, v in enumerate(str.split(' ')):
if re.search(r'\d', v):
item = re.sub(r'\D\S', '', v).rstrip()
item = re.sub(r'\[.*?\]/g', '', item)
floatList.append(float(item))
我试过了:
item.replace('[', '')
item.replace(']', '')
以及Ascii代码。
始终错误 ValueError:无法将字符串转换为浮动:' [536444501'
答案 0 :(得分:3)
您似乎应该能够剥离[
和]
:
str = str.replace('[', '').replace(']', '')
然后在分割字符串的每个成员上拆分调用float的字符串:
floats = [float(x) for x in str.split()]
请注意,因为python字符串是 immutable ,所以类似:
str.replace('[', '')
不会更改str
。而是返回一个 new 字符串,其中删除了请求的字符。由于返回一个新字符串,我们需要给该字符串一个名称(我只是选择给它命名为str
1 以避免使用太多名...)
1 请注意,str
也不是变量的好名称,因为它会影响内置str
类型。我强烈建议选择一个不同的名字: - )
答案 1 :(得分:1)
这个怎么样:
floats = [ float(x) for x in re.findall('\d+\.\d+e[+\-]\d\d', str)]
答案 2 :(得分:1)
您应该将数字存储在数据库中作为浮点数而不是字符串。
如果您正在使用postgres,则可以使用ArrayField
from django.contrib.postgres.fields import ArrayField
my_floats = ArrayField(models.FloatField())
如果你不是,你仍然应该将它们存储为数字,但它可能需要不同的关系模型。