如何在Python中将unicode字符转换为浮点数?

Pau*_*aul 10 python unicode floating-point

我正在解析一个具有分数的Unicode表示的网页.我希望能够直接获取这些字符串并将它们转换为浮点数.例如:

"⅕"将变为0.2

有关如何在Python中执行此操作的任何建议?

Kar*_*and 26

您想使用unicodedata模块:

import unicodedata
unicodedata.numeric(u'?')
Run Code Online (Sandbox Code Playgroud)

这将打印:

0.20000000000000001
Run Code Online (Sandbox Code Playgroud)

如果字符没有数值,则unicodedata.numeric(unichr[, default])返回默认值,或者如果未给出default,则会引发ValueError.

  • Python应该从Apple借来一个新的口号:"有一个模块可供选择". (6认同)
  • 对于病态的好奇,似乎python的python实现基本上只是一个大的查找表,请参阅python/trunk/Objects/unicodectype.c另外,显然有更多的unicode字符,其数值不仅仅是标准分数......请查看http://www.fileformat.info/info/unicode/char/0f2e/index.htm! (3认同)

Jas*_*len 5

浮点数的 Unicode 表示称为Vulgar Fractions

您可以使用unicodedata.numeric(char) 将它们转换为浮点数

但是,numeric(char)不适用于类似. 这需要更多的努力:

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)
Run Code Online (Sandbox Code Playgroud)

输出:

3¼ 3.25
19¼ 19.25
3 ¼ 3.25
10 10.0
Run Code Online (Sandbox Code Playgroud)

您可能还对使用正则表达式从更广泛的用户输入中分离出这些粗俗部分感兴趣。您可以使用其 unicode 字符代码的范围来做到这一点:

/[\u2150-\u215E\u00BC-\u00BE]/g
Run Code Online (Sandbox Code Playgroud)

示例:https : //regexr.com/3p8nd