Python UUID 格式错误的十六进制字符串
我想根据一个6.6的XY坐标对和日期来生成一个UUID(通用唯一识别码)。但是我给这个函数传了一个“格式不正确的十六进制UUID字符串”。我是Python新手,请帮帮我。
def LeID(Xv,Yv,Dv):
import uuid
import string
import arcpy
X_val = "%.6f" % Xv
Y_val = "%.6f" % Yv
date = Dv
xarr = string.split(X_val, '.')
yarr = string.split(Y_val, '.')
date = string.split(date , '/')
val = str(xarr[0] + xarr[1] + yarr[0] + yarr[1] + date[0] + date[1] + date[2] )
return '{' + str(uuid.UUID(val).time_low()) + '}'
1 个回答
3
这不会像你想的那样工作。
UUID有几种类型:一种是基于时间的(UUID1),一种是随机生成的(UUID4),还有一种是基于另一个UUID加上一些数据,通过MD5(UUID3)或SHA1(UUID5)组合而成的。
所以你可以拿一个已经定义好的UUID,比如 UUID('f82aa75f-56a8-442b-89d2-eb7aaae6f9c3')
,作为命名空间,然后从这个基础上派生出其他的UUID。
def LeID(Xv,Yv,Dv):
import uuid
import string
import arcpy
MyNS = uuid.UUID('f82aa75f-56a8-442b-89d2-eb7aaae6f9c3')
X_val = "%.6f" % Xv
Y_val = "%.6f" % Yv
date = Dv
xarr = string.split(X_val, '.')
yarr = string.split(Y_val, '.')
date = string.split(date , '/')
val = str(xarr[0] + xarr[1] + yarr[0] + yarr[1] + date[0] + date[1] + date[2] )
print MyNS, repr(val) # for debugging
return '{' + str(uuid.uuid5(MyNS, val)) + '}'