从u'96.9%'剥离%并返回浮点数的最有效方法

d8a*_*nja 0 python string unicode type-conversion

假设我运行一个BeautifulSoup过滤器并获得一些unicode u'96.9%',我只想将数值(和十进制)打印到文件中.

制作一个能够将str(u'96.9%')%符号分开并仅保留[0]第一部分(96.9)的小函数似乎非常简单,但这是最有效/最快的方法吗?

float(str(c).split("%")[0])
Out[227]: 96.9
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

用于str.rstrip()从字符串末尾删除字符:

float(c.rstrip(u'%'))
Run Code Online (Sandbox Code Playgroud)

float()使用Unicode字符串很好,不需要先将值转换为字符串.当调用str.rstrip()一个上unicode对象,最好是在传递unicode对象以指定要删除哪些字符.

您可能也想要删除空格,尤其是在从网页中提取时:

float(c.rstrip(u'% \n\t\r\xa0'))
Run Code Online (Sandbox Code Playgroud)

这将删除参数中的任何字符,直到字符串的右侧没有任何字符.这意味着从末尾删除任何百分号和任意空格.float()可以很好地处理空格,但如果百分比字符和字符串结尾之间有空格,则无法删除百分号.

演示:

>>> c = u'96.9%'
>>> float(c.rstrip(u'%'))
96.9
>>> float(c.rstrip(u'% \n\t\r\xa0'))
96.9
>>> c = u'96.9%  \n   '
>>> float(c.rstrip(u'%'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 96.9%      
>>> float(c.rstrip(u'% \n\t\r\xa0'))
96.9
Run Code Online (Sandbox Code Playgroud)

  • @Canuckish:使用切片会更快,但是你必须100%确定*总是*将成为百分号符号并且*总是*最后一个字符.使用HTML抓取,我总是在*的一边进行对冲,会有额外的空格*并使用`.rstrip()`为我删除空格.这种方法更加健壮. (2认同)