ai
  • index
  • cursor
  • vector
  • crawl
  • crawl-front
  • DrissionPage
  • logging
  • mysql
  • pprint
  • sqlalchemy
  • contextmanager
  • dotenv
  • Flask
  • python
  • job
  • pdfplumber
  • python-docx
  • redbook
  • douyin
  • ffmpeg
  • json
  • numpy
  • opencv-python
  • pypinyin
  • re
  • requests
  • subprocess
  • time
  • uuid
  • watermark
  • milvus
  • pymilvus
  • search
  • Blueprint
  • flash
  • Jinja2
  • secure_filename
  • url_for
  • Werkzeug
  • chroma
  • HNSW
  • pillow
  • pandas
  • beautifulsoup4
  • langchain-community
  • langchain-core
  • langchain
  • langchain_unstructured
  • libreoffice
  • lxml
  • openpyxl
  • pymupdf
  • python-pptx
  • RAGFlow
  • tabulate
  • sentence_transformers
  • jsonl
  • collections
  • jieba
  • rag_optimize
  • rag
  • rank_bm25
  • Hugging_Face
  • modelscope
  • all-MiniLM-L6-v2
  • ollama
  • rag_measure
  • ragas
  • ASGI
  • FastAPI
  • FastChat
  • Jupyter
  • PyTorch
  • serper
  • uvicorn
  • markdownify
  • NormalizedLevenshtein
  • raq-action
  • CrossEncoder
  • Bi-Encoder
  • neo4j
  • neo4j4python
  • matplotlib
  • Plotly
  • Streamlit
  • py2neo
  • abc
  • read_csv
  • neo4jinstall
  • APOC
  • neo4jproject
  • uv
  • GDS
  • heapq
  • UUID基本概念
  • Python uuid模块使用
    • 导入模块
    • 生成UUID
      • 版本1 UUID(基于时间戳和MAC地址)
      • 版本4 UUID(随机生成)
      • 版本3和5 UUID(基于命名空间和名称)
    • UUID对象属性
    • 字符串与UUID转换
  • 实际应用场景
  • 注意事项

UUID(Universally Unique Identifier,通用唯一标识符)是一个128位的标识符,用于在分布式系统中唯一地标识信息。Python通过uuid模块提供了UUID的生成和处理功能。

UUID基本概念 #

UUID有5个版本,每个版本使用不同的生成方法:

  1. 版本1 - 基于时间戳和MAC地址
  2. 版本2 - 基于DCE安全(不常用)
  3. 版本3 - 基于MD5哈希和命名空间
  4. 版本4 - 基于随机数
  5. 版本5 - 基于SHA-1哈希和命名空间

Python uuid模块使用 #

导入模块 #

import uuid

生成UUID #

版本1 UUID(基于时间戳和MAC地址) #

uuid1 = uuid.uuid1()
print(uuid1)  # 例如: 6ba7b810-9dad-11d1-80b4-00c04fd430c8

版本4 UUID(随机生成) #

uuid4 = uuid.uuid4()
print(uuid4)  # 例如: 110ec58a-a0f2-4ac4-8393-c866d813b8d1

版本3和5 UUID(基于命名空间和名称) #

# 版本3 - 使用MD5哈希
uuid3 = uuid.uuid3(uuid.NAMESPACE_DNS, 'example.com')
print(uuid3)  # 例如: 6fa459ea-ee8a-3ca4-894e-db77e160355e

# 版本5 - 使用SHA-1哈希
uuid5 = uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com')
print(uuid5)  # 例如: 886313e1-3b8a-5372-9b90-0c9aee199e5d

UUID对象属性 #

u = uuid.uuid4()

print(u.bytes)      # 16字节的原始UUID
print(u.hex)        # 32字符的十六进制表示
print(u.int)        # 128位整数
print(u.variant)    # UUID变体
print(u.version)    # UUID版本号

字符串与UUID转换 #

# 字符串转UUID
s = '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
u = uuid.UUID(s)

# UUID转字符串
str_uuid = str(u)

实际应用场景 #

  1. 数据库主键:替代自增ID,避免暴露数据量

    import sqlite3
    
    conn = sqlite3.connect('example.db')
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS users
                 (id TEXT PRIMARY KEY, name TEXT)''')
    
    user_id = str(uuid.uuid4())
    c.execute("INSERT INTO users VALUES (?, ?)", (user_id, 'Alice'))
    conn.commit()
  2. 文件命名:生成唯一文件名

    filename = f"report_{uuid.uuid4().hex}.pdf"
  3. 会话标识:Web应用中的会话ID

    session_id = uuid.uuid4().hex
  4. 分布式系统:跨系统的唯一标识

注意事项 #

  1. 版本选择:

    • 需要可预测的标识符 → 版本3或5
    • 需要完全随机的标识符 → 版本4
    • 需要包含时间信息 → 版本1
  2. 安全性:

    • 版本1可能泄露MAC地址和时间信息
    • 版本4虽然是随机的,但Python使用的随机源可能不够安全(对安全性要求高的场景应使用secrets模块)
  3. 性能:

    • 版本4生成速度最快
    • 版本1和3/5因为有计算过程,相对较慢

UUID提供了一种简单可靠的方式来生成全局唯一标识符,在分布式系统和需要唯一标识的场景中非常有用。

访问验证

请输入访问令牌

Token不正确,请重新输入