Python 如何根据文件内容创建UUID

Python How to Create UUID Based on File Contents

我查看了 documentation 并且在示例部分中,我没有看到如何根据文件内容创建 UUID。 Google 也没帮到我。

我试过这个:

>>> import uuid
>>> data = open('/media/emmc/DCIM/100ABC06/00059.JPG','rb')
>>> contents = data.read()
>>> len(contents)
9155
>>> uuid = uuid.UUID(contents)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/uuid.py", line 134, in __init__
ValueError: badly formed hexadecimal UUID string

还有这个:

>>> uuid = uuid.UUID(str(contents))
>>> uuid = uuid.UUID(contents.decode('ascii'))
>>> uuid = uuid.UUID(contents.decode('utf8'))

请帮助我了解如何根据 Python 2.7.

中的文件内容生成 UUID

当您将字符串传递给 uuid.UUID() 时,该字符串必须是 32 位或 16 位十六进制数字。

参考文档https://docs.python.org/2/library/uuid.html

从 32 个十六进制数字的字符串、作为字节参数的 16 字节的字符串、作为 bytes_le 参数的小端顺序的 16 字节的字符串、六个元组创建 UUID整数(32 位 time_low、16 位 time_mid、16 位 time_hi_version、8 位 clock_seq_hi_variant、8 位 clock_seq_low、48 位节点)作为字段参数,或单个 128 位整数作为 int 参数。当给出一串十六进制数字时,花括号、连字符和 URN 前缀都是可选的。例如,这些表达式都产生相同的 UUID:

UUID('{12345678-1234-5678-1234-567812345678}')
UUID('12345678123456781234567812345678')
UUID('urn:uuid:12345678-1234-5678-1234-567812345678')
UUID(bytes='\x12\x34\x56\x78'*4)
UUID(bytes_le='\x78\x56\x34\x12\x34\x12\x78\x56' +
              '\x12\x34\x56\x78\x12\x34\x56\x78')
UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
UUID(int=0x12345678123456781234567812345678)

如果您想创建文件内容的哈希值,您可能不需要 UUID。相反,您应该使用 hashlib 和 MD5、SHA-1、SHA-256 或任何其他受支持的算法来创建文件的指纹。