Python UUID 格式错误的十六进制字符串

4 投票
1 回答
2793 浏览
提问于 2025-04-17 07:20

我想根据一个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)) + '}'

撰写回答