【问题标题】:Python hash appropriate to be a file name适合作为文件名的 Python 哈希
【发布时间】:2016-04-11 14:41:46
【问题描述】:

我必须存储一些临时文件(它不必是人类可读的)。由于我是从不同的线程创建它们,我不想在线程之间进行困难的通信 - 名称已保留或已使用等。

最好的选择似乎是使用hash

例子:

我在“Žilina”、“54845”块下有很多记录。我想将它们临时存储到某个 txt 文件中。

所以我会这样做:

write_into_temp_file(name_of_the_file=hashlib.file_name_hash('Žilina54845'))

而且我可以肯定 (99.9999 %) 不会与另一个临时文件发生任何冲突。

我试图在这个问题Short Python alphanumeric hash with minimal collisions 中找到一些灵感,但是那些hashes 包含不允许成为文件名一部分的标志。例如==

编辑:

我的操作系统是Windows

【问题讨论】:

  • 为什么不使用uuid
  • 我必须依赖唯一的字符串。事实上,一个线程中可以创建更多文件等。
  • 我不明白,是什么阻止您为每个文件生成 uuid?

标签: python windows hash filenames


【解决方案1】:

通常哈希不包含任何特殊字符...

from hashlib import sha512
import base64

my_file_name="myfilenameverylongtohide.myextension"
hash_filename= sha512(my_file_name).hexdigest()

print hash_filename

>>> e4cd8ae2b7a1c0eb44a987f5b89e43b892709a4b9a072b0fa579715da5becf40318cbc972131485f2132209a76a0ffc199973072665c639d628f641c8b872c8

如果您确实更喜欢使用 base64 表示法,您可以将“=”(最后一个字符)替换为“

b64_hash_filename= base64.b64encode(hash_filename).replace('=','')
print b64_hash_filename

>>> YWU0Y2Q4YWUyYjdhMWMwZWI0NGE5ODdmNWI4OWU0M2I4OTI3MDlhNGI5YTA3MmIwZmE1Nzk3MTVkYTViZWNmNDAzMThjYmM5NzIxMzE0ODVmMjEzMjIwOWE3NmEwZmZjMTk5OTczMDcyNjY1YzYzOWQ2MjhmNjQxYzhiODcyYzg

【讨论】:

    猜你喜欢
    • 2010-09-22
    • 1970-01-01
    • 2011-07-01
    • 2017-12-19
    • 2010-11-21
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多