如何增加数字字符串';000000000 1';用python?

如何增加数字字符串';000000000 1';用python?,python,string,increment,Python,String,Increment,我有一个函数getNextSeqNo()。我希望它在被调用时增加数值字符串,即0000000000到000000000 1,然后到000000000 2。我该怎么做 我写的如下: def __init__(self) : self.seq = '0000000000' def getNextSeqNo(self) : self.seq = str(int(self.seq) +1) return(self.seq) 我得到的是1作为输出,而不是0000000001最快

我有一个函数
getNextSeqNo()
。我希望它在被调用时增加数值字符串,即
0000000000
000000000 1
,然后到
000000000 2
。我该怎么做

我写的如下:

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

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

我得到的是1作为输出,而不是
0000000001

最快、最简单,但肯定不是最清晰的:

str(int('9' + self.seq) + 1)[1:]
它的工作原理是在转换为整数之前添加一个前导数字,保留所有前导零,然后在转换回字符串后去掉该前导数字。它的优点是不需要您事先知道需要多少位数字。

将您的号码格式化,包括:

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

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'

您可以将字符串转换为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

您应该将当前数值存储为
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

您可以使用字符串格式:

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

print new_s

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

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

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

答案有很多。这里还有一个:

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


请注意如何直接将int作为参数。

+1用于存储整数,而不是像字符串一样的整数。“in an int”是您的意思。@Martijn感谢您的提醒。非常不干净,并引发了一些边界问题。@njzk2,不确定“不干净”是什么意思,我能想到的只有一个边界问题——但这是一个大问题。如果数字是负数,负号将被去除。如果数字为9*x,结果将为0*(x+1),导致a/错误值b/错误位数。(出于第二个原因,我可能会选择“1”+self.seq。)这是两个边界问题(好的,可能不太多)。至于不干净,我的意思是代码没有执行的操作的含义。从来没有新的方法存在!我是python新手,所以不知道格式说明符。非常感谢,伙计们,现在很好用了。:)
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'