相关疑难解决方法(0)

python中用于命名缓存文件的最短哈希

python中可用的最短哈希(文件名可用形式,如hexdigest)是什么?我的应用程序想要保存某些对象的缓存文件.对象必须具有唯一的repr(),因此它们用于"种子"文件名.我想为每个对象生成一个可能唯一的文件名(不是那么多).它们不应该发生冲突,但是如果它们发生了我的应用程序将只是缺少该对象的缓存(并且必须重新索引该对象的数据,这是应用程序的一个小成本).

因此,如果存在一个冲突,我们会丢失一个缓存文件,但是收集的缓存所有对象的节省使得应用程序启动速度更快,因此无关紧要.

现在我实际上正在使用abs(hash(repr(obj))); 那是对的,字符串哈希!还没有找到任何碰撞,但我希望有更好的哈希函数.hashlib.md5在python库中可用,但如果放入文件名,则hexdigest非常长.替代方案,具有合理的抗冲击性?

编辑:用例是这样的:数据加载器获取数据携带对象的新实例.独特的类型有独特的repr.因此,如果存在缓存文件hash(repr(obj)),我将取消该缓存文件并将obj替换为unpickled对象.如果发生碰撞并且缓存是假匹配,我注意到.因此,如果我们没有缓存或具有错误匹配,我改为初始化obj(重新加载其数据).

结论(?)

strpython中的哈希可能已经足够好了,我只担心它的碰撞阻力.但是如果我可以2**16用它来散列对象,那就足够了.

我发现如何采用十六进制哈希(来自任何哈希源)并使用base64紧凑地存储它:

# 'h' is a string of hex digits 
bytes = "".join(chr(int(h[i:i+2], 16)) for i in xrange(0, len(h), 2))
hashstr = base64.urlsafe_b64encode(bytes).rstrip("=")
Run Code Online (Sandbox Code Playgroud)

python hash

18
推荐指数
3
解决办法
1万
查看次数

标签 统计

hash ×1

python ×1