如何递增数字字符串' 0000000001'在python?

时间:2014-04-24 13:34:24

标签: python string increment

我有一个函数getNextSeqNo()。我希望它在调用时增加数字字符串,即00000000000000000001,然后到0000000002。我该怎么做?

我写的如下:

def __init__(self) :
    self.seq = '0000000000'

def getNextSeqNo(self) :
    self.seq = str(int(self.seq) +1)
    return(self.seq)

我输出1而不是0000000001

7 个答案:

答案 0 :(得分:6)

您可以将字符串转换为int并使用类似

的内容
self.seq = '%010d' % (int(self.seq) + 1)
return self.seq

如果你不需要self.seq成为你可以做的字符串

def __init__(self) :
    self.seq = 0

def getNextSeqNo(self) :
    self.seq += 1
    return '%010d' % self.seq

答案 1 :(得分:5)

最快最简单,但肯定不是最清楚:

str(int('9' + self.seq) + 1)[1:]

它的工作原理是在转换为整数之前添加一个前导数字,以保留所有前导零,然后在转换回字符串后剥离该前导数字。它的优点是不需要事先知道需要多少位数。

答案 2 :(得分:3)

使用format()格式化您的号码:

self.seq = format(int(self.seq) + 1, '010d')

更好的是,不要存储字符串而是整数并返回格式化版本:

def __init__(self):
    self.seq = 0

def getNextSeqNo(self):
    self.seq += 1
    return format(self.seq, '010d')

010d格式输出您的整数作为带有10个字符的0填充字符串:

>>> format(0, '010d')
'0000000000'
>>> format(42, '010d')
'0000000042'

答案 3 :(得分:1)

您可以使用字符串格式化来执行此操作:

new_s = '{:0>{}}'.format(str(int(s)+1),len(s))

print new_s

答案 4 :(得分:1)

答案很多。这是另一个:

import string
seq = 1
string.zfill(seq, 10)
# '0000000001'
# works with strings too:
string.zfill('00001', 10)
# '0000000001'

seq = 1
str(seq).zfill(10)
# '0000000001'

注意string.zfill如何直接将int作为参数。

答案 5 :(得分:0)

您应该将当前数值存储为int,并在运行时生成字符串。

>>> i = 0
>>> "{0:010d}".format(i)
'0000000000'

>>> i += 1
>>> "{0:010d}".format(i)
'0000000001'

将数值存储在字符串形式中是一个坏主意,只是因为您希望如何呈现它们(或者在需要字符串的某些上下文中使用)。

然后getNextSeqNo变成了这个:

def getNextSeqNo(self):
    ret = "{0:010d}".format(self._seq_i)
    self._seq_i += 1
    return ret

答案 6 :(得分:0)

最好的办法是,不要将序列保存在字符串中,而是在需要时格式化序列号:

class SeqNo:
    def __init__(self):
        self.seq = 0

    def next(self):
        self.seq += 1
        return '%10d' % self.seq