如何在Python中将Unicode字符转换为浮点数?
我正在解析一个网页,这个网页上有一些分数的Unicode表示法。我想直接把这些字符串转换成浮点数。比如:
“⅕”应该变成0.2
有没有什么建议可以在Python中做到这一点?
7 个回答
1
因为Unicode中定义的分数数量是有限的,所以使用字典来存储这些分数看起来是个不错的主意:
Fractions = {
u'¼': 0.25,
u'½': 0.5,
u'¾': 0.75,
u'⅕': 0.2,
# add any other fractions here
}
更新:其实使用unicodedata
模块会是一个更好的解决方案。
6
这些浮点数的Unicode表示叫做普通分数
你可以使用unicodedata.numeric(char)把它们转换成浮点数。
不过,numeric(char)
对像3¾
这样的字符是没用的。要处理这种情况,需要多花点功夫:
from unicodedata import numeric
samples = ["3¼","19¼","3 ¼","10"]
for i in samples:
if len(i) == 1:
v = numeric(i)
elif i[-1].isdigit():
# normal number, ending in [0-9]
v = float(i)
else:
# Assume the last character is a vulgar fraction
v = float(i[:-1]) + numeric(i[-1])
print(i, v)
输出结果:
3¼ 3.25
19¼ 19.25
3 ¼ 3.25
10 10.0
你可能还想用正则表达式从更广泛的用户输入中提取这些普通分数。你可以通过它们的Unicode字符编码范围来实现:
/[\u2150-\u215E\u00BC-\u00BE]/g
33
你想使用 unicodedata 这个模块:
import unicodedata
unicodedata.numeric(u'⅕')
这段代码会输出:
0.20000000000000001
如果这个字符没有数字值,那么 unicodedata.numeric(unichr[, default])
会返回一个默认值,如果没有提供默认值,就会报错 ValueError。