【问题标题】:Python How to Create UUID Based on File ContentsPython如何根据文件内容创建UUID
【发布时间】:2023-03-15 23:19:01
【问题描述】:

我正在查看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。可能你想要的是hash

标签: python python-2.7 guid uuid


【解决方案1】:

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

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

从一个 32 位十六进制数字的字符串、一个 16 字节的字符串作为 bytes 参数、一个 16 字节的 little-endian 字符串作为 bytes_le 参数、一个 6 个整数的元组(32 位 time_low , 16-bit time_mid, 16-bit time_hi_version, 8-bit clock_seq_hi_variant, 8-bit clock_seq_low, 48-bit node) 作为 fields 参数,或单个 128-bit 整数作为 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)

【讨论】:

  • 这在 Python 3 中也有效。
【解决方案2】:

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

【讨论】:

  • 谢谢 - 我做了文件的 MD5sum。
猜你喜欢
  • 2011-02-15
  • 2016-02-11
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多