You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python批量写入设备UUID:大文件避免重复使用的最优方案

UUID分配方案分析与优化

首先说你提到的两个方案:

  • 方案1(删除已用行):确实需要重写整个文件。因为文件是线性存储的,删除某一行后,后面的所有内容都要往前挪动,本质上就是把删除行之后的内容重新写入文件,对10万行的大文件来说,每次删除都做这个操作效率很低,尤其是每天要处理1000次,完全没必要。
  • 方案2(添加使用标识位):如果调整后的每行长度固定(比如32位UUID+1位标识+换行,总长度固定),那不需要重写整个文件。你可以通过计算每行的字节偏移量,直接定位到目标行的标识位,用随机读写模式(r+)修改那个位置的字符。但这个方案有个小问题:每次启动都要从头遍历找第一个未使用的UUID,10万行虽然不多,但每天都遍历一次也有点冗余,而且如果中间有大量已使用的UUID,遍历会越来越慢。

更优的批量处理方案

结合你每天固定使用1000个UUID的场景,推荐两种更高效的方案:

1. 索引记录法(最推荐)

不用修改原始的10万条UUID大文件,只维护一个极小的索引文件(比如next_index.txt),里面记录下一个要使用的UUID在大文件中的行号(初始值为0)。

  • 程序启动时,读取索引文件的数值n,然后直接定位到大文件的第n行开始,连续读取1000行UUID。
  • 使用完成后,计算新的索引值n+1000,将其写入索引文件(注意用原子操作:先写临时文件next_index.tmp,再用os.replace替换原文件,避免程序崩溃导致索引错误)。
  • 优势:完全不用修改原始UUID文件,操作都是读少量内容+更新小文件,速度极快,也不用担心数据损坏,适合固定批量使用的场景。

2. 分文件管理法

把UUID分成两个文件:unused.txt(未使用)和used.txt(已使用)。

  • 程序启动时,读取unused.txt的前1000行,将这些UUID取出使用。
  • 把这1000行追加到used.txt中,然后将unused.txt中剩下的内容重新写入(或者读取剩下的内容覆盖unused.txt)。
  • 优势:逻辑简单直观,不用计算偏移量,适合对文件操作不太熟悉的场景。如果担心覆盖文件时出错,可以先把剩余内容写到临时文件,再替换unused.txt。

另外,不管用哪种方案,都要注意程序崩溃时的原子性:比如在批量读取UUID后,一定要确保索引或文件更新完成再开始写入设备,或者先更新索引/文件再使用UUID,避免程序崩溃导致重复使用UUID。

内容的提问来源于stack exchange,提问作者uz3il

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:03:14