我的知识记录

Python 批量生成 UUID:uuid4 生成唯一标识写入文件

用 Python 标准库 uuid 批量生成 UUID4 唯一标识,支持去重检查、写入 txt/csv 文件,适合做数据库主键、订单号、测试数据 ID。

场景痛点

做数据库迁移、压测造数据、批量导入用户,需要给每行数据一个全局唯一 ID。自增 ID 在分布式、分库分表场景会撞号,UUID 是通用解法。手动一个个复制 uuid 没效率,用 Python 一次生成几千个,去重检查后写入文件,直接导入数据库。

用到的库

# 标准库 uuid, 不需要安装

完整代码

import uuid


def gen_uuid4(uppercase=False, with_dash=True):
"""生成一个 UUID4,默认小写带横杠"""
u = uuid.uuid4()
s = str(u)
if not with_dash:
s = s.replace("-", "")
if uppercase:
s = s.upper()
return s


def batch_gen(count=100, uppercase=False, with_dash=True, out_path="uuids.txt"):
"""批量生成 count 个 UUID,自动去重,写入文件"""
seen = set()
while len(seen) < count:
seen.add(gen_uuid4(uppercase, with_dash))

with open(out_path, "w", encoding="utf-8") as f:
for u in seen:
f.write(u + "\n")
print(f"已生成 {len(seen)} 个 UUID,写入 {out_path}")
# 打印前 5 个示例
for u in list(seen)[:5]:
print(u)


def other_uuid_versions():
"""对比其他 UUID 版本"""
print("UUID1(基于时间+MAC):", uuid.uuid1())
print("UUID3(基于名字 MD5):", uuid.uuid3(uuid.NAMESPACE_DNS, "example.com"))
print("UUID4(随机):", uuid.uuid4())
print("UUID5(基于名字 SHA1):", uuid.uuid5(uuid.NAMESPACE_DNS, "example.com"))


def main():
# 生成 100 个标准 UUID4,小写带横杠
batch_gen(100, out_path="./uuids.txt")
print("-" * 40)
# 生成 50 个去掉横杠的大写 UUID,适合做订单号
# batch_gen(50, uppercase=True, with_dash=False, out_path="./order_ids.txt")
print("-" * 40)
other_uuid_versions()


if __name__ == "__main__":
main()

代码讲解

  • uuid.uuid4() 生成随机 UUID,是实际项目最常用的版本,128 位随机数,碰撞概率可以忽略。
  • 标准格式是 8-4-4-4-12 带横杠的小写字符串,比如 3fa2f1c4-...;去掉横杠就是 32 位十六进制。
  • set 自动去重,虽然 UUID4 碰撞概率极低,但批量生成几万时做个保险。
  • uuid.uuid1 基于时间戳和 MAC 地址,能反推生成机器,隐私场景别用;uuid3/uuid5 基于命名空间+名字,同一个输入永远得到同一个 UUID,适合做确定性 ID。
  • 写文件每行一个 UUID,方便 LOAD DATA INFILE 或 pandas 读入数据库。

运行结果

运行后生成 ./uuids.txt,里面 100 行 UUID,控制台打印前 5 个示例和四种 UUID 版本对比。把 txt 导入 Excel 或数据库就能用。

注意事项

  • UUID4 碰撞概率在 10 亿级数据量下依然极低,不需要过度担心;批量生成几万时 set 去重只是防御性编程。
  • 数据库存 UUID 建议用 CHAR(36) 或数据库原生 UUID 类型,别用整数,否则转字符串很麻烦。
  • MySQL 里 UUID 当主键插入性能不如自增 ID(无序索引页分裂),大数据量考虑用 UUID 存业务 ID、主键仍用自增。
  • Windows 注册表有些地方喜欢大写无横杠,脚本里 uppercase=True, with_dash=False 直接生成那种格式。
  • 不要用 UUID1,它暴露 MAC 地址,安全审计会被打回。

Python 批量生成 UUID:uuid4 生成唯一标识写入文件

标签:

更新时间:2026-09-14 20:44:19

上一篇:Python 批量图片格式转换:jpg/png/webp 互转教程

下一篇:Python 批量生成二维码:从 CSV 读取数据一键出图