Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字符串值创建唯一的短ID_Python_Hashlib - Fatal编程技术网

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

Python 从字符串值创建唯一的短ID,python,hashlib,Python,Hashlib,我有一些具有唯一ID的数据,以字符串形式存储在表单中: ddd.dddddaddd.dddddz 其中,d是一些数字,a/z是一些字母字符。对于a而言,数字可以是0-9,字符可以是E或W,对于z而言,字符可以是N或S 我想将其转换为一个唯一的整数,并且我尝试使用hashlib模块返回: >>> int(hashlib.sha256(str.encode(s)).hexdigest(), 16) Output: a very long integer (on another s

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

ddd.dddddaddd.dddddz
其中,
d
是一些数字,
a
/
z
是一些字母字符。对于
a
而言,数字可以是0-9,字符可以是
E
W
,对于
z
而言,字符可以是
N
S

我想将其转换为一个唯一的整数,并且我尝试使用
hashlib
模块返回:

>>> int(hashlib.sha256(str.encode(s)).hexdigest(), 16)
Output: a very long integer (on another system cannot copy it)
有没有办法从字符串生成唯一的整数ID,使其不超过12位?我知道我永远不需要超过12位的唯一整数ID。

简单一点:

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

不是您在问题中仍然要求的不可能的12位数字,而是在您在评论中允许的20位数字下。

当您处理坐标时,我会尽力将信息保留在最后的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
,则应循环使用它们并增加最后一位数字


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

允许哪些数字和字母字符?@超级大脑数字:0-9,字母:E、S、W,N.更新了OP。16位数字和2个字母怎么能匹配12位数字?@superbrain我不知道它们必须匹配所需的长度,我认为字符串可以通过某种“神奇漏斗”输出一个独特的散列。如果散列必须比字符串长,20位也可以。请发布运行代码。没有
sha25
,您的括号有误。该示例表明,“输出:一个很长的整数(在另一个系统上无法复制)”实际上是
int()
的输出。