如何增加数字字符串';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'