从字符串值创建唯一的短ID

2024-04-19 13:48:11 发布

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

我有一些具有唯一ID的数据,以字符串形式存储在表单中:

ddd.dddddaddd.dddddz

其中d是一些数字,a/z是一些字母字符。数字可以是0-9,字符可以是EW表示a,或者NS表示z

我想把它转换成一个唯一的整数,我尝试使用hashlib模块返回:

>>> int(hashlib.sha256(str.encode(s)).hexdigest(), 16)
Output: a very long integer (on another system cannot copy it)

有没有办法从字符串生成唯一的整数ID,使其不超过12位?我知道我永远不需要超过12位的唯一整数ID


Tags: 模块数据字符串id表单字母数字整数
2条回答

由于您正在处理坐标,我将尽最大努力将信息保留在最后12位ID中

  • 如果您的点是全局的,可能需要保留这些度,但它们可能是广泛的,因此在精度方面您可以牺牲一些信息
  • 如果你的点是局部的(都在小于10度的范围内),你可以跳过度的前两位,然后集中在小数点上
  • 由于两个点可能彼此接近,因此可能需要谨慎地保留一个数字作为序列号

关于广泛观点的建议:

s = "123.45678N123.45678E"
ident = "".join([s[0:6],s[10:16]]).replace(".","")
q = 0
if s[9]=="N":
    q+=1
if s[-1]=="E":
    q+=2
ident+=str(q)+'0'

该示例将转换为123451234530

在计算每个ID的初始ident数字之后,如果已经使用了ident,则应该循环使用它们并增加最后一个数字

通过这种方式,只需将前10位数字分隔为ddd.dd格式的两个度数,并使用[-2]位作为象限的指示器(0:SW、1:SE、2:NW、3:NE),就可以轻松地从ID重建位置

简单一点:

>>> s = '123.45678W123.45678S'
>>> int(s.translate(str.maketrans('EWNS', '1234', '.')))
123456782123456784

不是你在问题中要求的不可能的12位数,而是在评论中允许的20位数以下

相关问题 更多 >