2011-11-29 47 views
3

试图基于一个6.6 XY一个UUID坐标对和日期。不过,我给这个函数一个'形成十六进制的UUID字符串'。 Python noob plz帮助。Python的UUID格式错误的十六进制字符串

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()) + '}' 

回答

3

它不会按照您的想法工作。

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

所以,你会采取一个预先定义的UUID,也许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)) + '}' 
+0

它仍然下降的厉害形成六角错误... – Simon

+0

没有一个堆栈跟踪? – glglgl

+0

请加我新添加的打印线,以找出进入'uuid'引擎。 – glglgl

相关问题