python:动态类型转换unicode对象到python对象的转换

2024-04-28 15:43:59 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我在数据管道项目中面临的一个问题。 我有两个数据源。一个包含所有用户数据,另一个包含从用户数据到输出的所有列的元数据。在

所以python很擅长动态类型转换,就像我说的

a = float
b = "25.123"
c = a(b)
print(c)
>> 25.123

这就是我要做的,我想动态地键入强制转换值,以便正确地处理它们。从元数据数据源检索类型。 问题是当我对元数据执行django模型查询时,我得到unicode对象。在

^{pr2}$

如何将这个u'float'转换为float? 这种方法有更好的选择吗? 我签出了this,但它不起作用

接受所有建议


Tags: 数据项目对象django用户模型类型键入
3条回答

您可以使用numpy库中的astype

import numpy as np
np.array(('213.123')).astype(a)

诚然,这需要通过一个数组,因为astype()可以在numpy数组上工作,但是它可以将字符串作为类型来计算。在

在第一个示例中,a = floata是一个内置函数,但在第二个示例中,a = u"float"a是一个unicode字符串。如果您想在不需要创建动态映射的情况下完成该类型的转换,请执行以下操作:

# for Python 2
a = u"float"
b = "123.123"
import __builtin__
print getattr(__builtin__, a.decode())(b) 
# 123.123

# for Python 3+
a = u"float"
b = "123.123"
import builtins
print(getattr(builtins, a)(b))
# 123.123

我建议您不要使用eval()(如{a1}所建议的那样),因为这可能导致重大的安全风险。这就是为什么我使用^{}/^{}模块和getattr()来检索{}函数。在


您还可以创建一个映射(即dict),将unicode字符串映射到其相应的函数(由comment建议):

^{pr2}$

使用映射是最安全的方法,但它将您的“动态性”仅限于映射中列出的类型。在

您可以使用eval()函数来计算代码,但您需要小心使用该函数!否则,您可能会看到post。另一种解决方案是预先定义允许的类型,并使用typeConstructor在字典映射typeName中收集它们。在

相关问题 更多 >