【发布时间】:2014-03-16 21:51:10
【问题描述】:
我需要在一个对象上记录序列号。我们输入许多对象。大多数序列号都是字符串——这些数字不以数字形式使用,只是作为唯一标识符——但它们通常是连续的。此外,由于序列号的唯一 ID 状态,前导零很重要。
在进行数据输入时,最好只输入第一个“连续”序列号(例如 000123),然后输入项目数(例如 5)以获得所需的输出 - 这样我们就可以批量输入数据,见下文:
Obj1.serial = 000123
Obj2.serial = 000124
Obj3.serial = 000125
Obj4.serial = 000126
Obj5.serial = 000127
问题在于,当您将第一个数字作为字符串,转为整数并递增时,您会丢失前导零。
并非所有序列都是连续的 - 并非所有序列都是偶数(例如 FDM-434\RRTASDVI908)
但是那些,我想自动输入。
在 python 中,在迭代之前检查字符串中的前导零(* 以及,我猜,像 0009999 这样的边缘情况),然后在增量后重新应用这些零的最优雅的方法是什么?
我有一个解决这个问题的方法,但它并不优雅。事实上,这是最无聊和最生硬的算法。
这个问题有什么优雅的解决方案吗?
编辑
为了澄清这个问题,我希望序列在增量之后具有相同的位数。
因此,在大多数情况下,这意味着重新应用相同数量的前导零。但是在某些边缘情况下,前导零的数量会减少。例如:009 -> 010; 0099 -> 0100
【问题讨论】:
-
你先验地知道字段的长度吗?听起来您正试图根据给定的一个序列号来计算它。如果您确实知道要生成的字段的长度,例如 6,那么
'%06d' % n的优雅就很难被击败。 -
如果你不这样做,
('%0'+str(len(ser))+'d')% (1+int(ser))仍然是一个单行... -
不,不幸的是,任何特定连续剧或连续剧组的长度都是可变的。
-
我喜欢@fredtantini 在这里的回答——我得检查一下。是的,我真的很喜欢这个答案。你能把它分解一下吗?
标签: python serialization