字符串,整数和前导零

数据孩子

我需要在对象上记录SerialNumber(s)。我们输入许多对象。大多数序列号都是字符串-数字不会像唯一标识符一样在数字上使用-但它们通常是顺序的。此外,由于序列号的唯一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

弗雷丹蒂尼

我在这里发表我的评论,Obj1.serial是一个字符串:

Obj1.serial = "000123"

('%0'+str(len(Obj1.serial))+'d') % (1+int(Obj1.serial))

就像@ owen-s的答案'%06d' % n:打印数字并以0开头填充。

关于'%d' % n,这只是一种打印方式PEP3101

在Python 3.0中,%运算符由更强大的字符串格式化方法format()进行了补充。对str.format()方法的支持已反向移植到Python 2.6。

因此,您可能要改用format ...无论如何,%符号的右边有一个整数,它将替换%d左侧字符串中内部。

'%06d' 表示至少打印6(6)位数字(d),并在必要时填充0(0)。

Obj1.serial字符串一样,您必须将其转换为增量之前的整数:1+int(Obj1.serial)而且由于右侧为整数,我们可以这样保留它。

现在,对于左侧,由于我们无法进行硬编码6,因此必须采用的长度Obj1.serial但这是一个整数,因此我们必须将其转换回字符串,并连接到表达式%0 6 d的其余部分'%0'+str(len(Obj1.serial))+'d'因此

('%0'+str(len(Obj1.serial))+'d') % (1+int(Obj1.serial))

现在,使用格式(format-specification):

'{0:06}'.format(n)

用相同的方式替换为

('{0:0'+str(len(Obj1.serial))+'}').format(1+int(Obj1.serial))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章