【问题标题】:Convert String to Decimal in Python在 Python 中将字符串转换为十进制
【发布时间】:2014-04-23 23:08:22
【问题描述】:

我们可以使用以下函数将datetime 值转换为十进制。

import time
from datetime import datetime

t = datetime.now()
t1 = t.timetuple()

print time.mktime(t1)

输出:

Out[9]: 1395136322.0

同样有没有办法使用 python 将字符串转换为decimal?。

示例字符串。

"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"

【问题讨论】:

  • 预期的输出是什么???
  • @Jayanth Koushik :可以得到浮点/整数输出。
  • 也许你误解了time.mktime()。它返回自 1970 年 1 月 1 日以来的秒数。因此,它不是将日期表示为自耶稣以来的(日、月、年),而是将时间/日期表示为自 1970 年以来的秒数。对于任意字符串并没有真正的类似表示。跨度>
  • @Christian Aichinger : 没关系,它显示秒数,我只需要获取一个字符串的数值,并且总是如果出现相同的字符串应该产生相同的数值?

标签: python string decimal


【解决方案1】:

如果你想要一个整数来唯一标识一个字符串,我会选择散列函数,比如 SHA。它们为相同的输入返回相同的值。

import hashlib
def sha256_hash_as_int(s):
    return int(hashlib.sha256(s).hexdigest(), 16)

如果您使用 Python 3,您首先必须将 s 编码为某种具体的编码,例如 UTF-8。

此外,查看hashlib 模块并确定您是否真的需要整数,或者hexdigest() 的输出是否也适合您。

【讨论】:

  • 这个怎么样? abs(hash(s)) % (10 ** 8) 它是否总是为相同的字符串生成相同的数字。(到目前为止,我的实验字符串总是给我相同的数字)
  • 这取决于您的需求。 hash(s) 在不同的 Python 版本之间甚至在不同的 Python 会话之间不是恒定的(仅限于较新的 Python 版本,由于hash randomization)。 hashlib 函数旨在始终为相同的输入提供相同的输出。
  • 感谢您的解释:)
【解决方案2】:

你可以使用hash函数:

>>> hash("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0")
1892010093

【讨论】:

  • 嘿,ndpu,我得到了负值?对于上面我得到的-3723762795795855251。
  • 是的;哈希取决于很多事情。该值可能为负数。
  • @NilaniAlgiriyage 检查这个问题stackoverflow.com/questions/793761/…
  • @NilaniAlgiriyage 请注意,hash 对于同一字符串可能并不总是相同。如果打开哈希随机化,解释器的不同执行将导致不同的哈希。
  • @ndpu : 是的,散列有效 :) 谢谢...abs(hash(s)) % (10 ** 8) 可用于获得 8 位表示(或任意位数) .
猜你喜欢
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 2019-02-10
  • 2014-03-07
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 2011-06-06
相关资源
最近更新 更多