4

尝试根据 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()) + '}'
4

1 回答 1

3

它不会像你想的那样工作。

UUID有几种类型:基于时间 (UUID1)、随机 (UUID4) 或基于另一个 UUID 加数据,通过 MD5 (UUID3) 或 SHA1 (UUID5) 组合在一起。

因此,您可以将一个先前定义的 UUID(maybe UUID('f82aa75f-56a8-442b-89d2-eb7aaae6f9c3'))作为命名空间并从中派生所有内容。

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)) + '}'
于 2011-11-29T17:49:16.867 回答