Pro*_*eus 1 python django python-2.7
我正在尝试使用以下方法为我的一个模型创建一个缩短的ID:
_char_map = string.ascii_letters+string.digits
def index_to_char(sequence):
return "".join([_char_map[x] for x in sequence])
def make_short_id(self):
_id = self.id
digits = []
while _id > 0:
rem = _id % 62
digits.append(rem)
_id /= 62
digits.reverse()
return index_to_char(digits)
@staticmethod
def decode_id(string):
i = 0
for c in string:
i = i * 64 + _char_map.index(c)
return i
Run Code Online (Sandbox Code Playgroud)
self.iduuid即在哪里1c7a2bc6-ca2d-47ab-9808-1820241cf4d4,但出现以下错误:
rem = _id%62 TypeError:在字符串格式化期间并非所有参数都已转换
仅当id是时,此方法才有效int。
如何修改缩短uuuid和解码的方法?
更新:
感谢您的帮助。我试图找到一种创建编码和解码方法的方法,该方法采用一个字符串,使其变短,然后再次将其解码。上面指出的方法永远无法使用字符串(uuid),
该%运算符是字符串格式化或插值运算符,与字符串一起使用时,不会在Python中返回余数。它将尝试返回格式化的字符串。
我不确定您输入的内容是什么,但是请尝试使用进行转换,以int获取其余信息。
编辑:我现在看到您的输入,不确定为什么我错过了。这是将UUID转换为数字的一种方法:
import uuid
input = "1c7a2bc6-ca2d-47ab-9808-1820241cf4d4"
id = uuid.UUID(input)
id.int
# returns 37852731992078740357317306657835644116L
Run Code Online (Sandbox Code Playgroud)
不确定“缩短”是什么意思,但您似乎正在尝试对UUID进行“ base 62编码”。如果您使用此问题中的函数,将得到以下结果:
uuid62 = base62_encode(id.int)
# uuid62 contains 'RJChvUCPWDvJ7BdQKOw7i'
Run Code Online (Sandbox Code Playgroud)
取回原始UUID:
# Create a UUID again
id = uuid.UUID(int=base62_decode(uuid62))
id.hex
# returns '1c7a2bc6ca2d47ab98081820241cf4d4'
str(id)
# returns '1c7a2bc6-ca2d-47ab-9808-1820241cf4d4'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |