2010-01-03 2 views
0

내가 좋아하는 숫자를 만들 싶습니다 (안 데이터베이스) 다음과 같은 수의 증가를 만들 수 있습니다장고/파이썬 : 어떻게

000000000001 

데이터베이스에 저장합니다. 분명히 데이터베이스에서이 방식으로 증가 할 수는 없으므로 (데이터베이스에서 이전 번호를 가져 와서 다음 레코드를 만들기 위해 1 씩 증가시키는 가장 효율적인 방법을 찾고 있습니다)

내가 수동으로 첫 번째 숫자를 저장하는 경우

000000000002 
...

, 나는이 제로의 그 수를 유지하기 위해 수동 입력의 일종을 할 수 있습니까? 나는 어디서부터 시작해야할지 모른다.

답변

5

앞에 오는 0은 모두 형식을 지정하는 것입니다.

>>> "%012d" % (1,) 
'000000000001' 
>>> "%012d" % (2,) 
'000000000002' 

일반 정수를 사용하고 맨 앞에 0이 많이 포함되도록 서식을 지정합니다.

+2

확실히 "% 012d"% (22,)는 '000000000022'로 평가됩니다. –

+0

그리고 트래비스 브래드쇼 (Travis Bradshaw). BTW, 나는 ID가있는 보이즈 (Travis Bradshaw)와 함께 고등학교에 다녔습니다. – orokusaki

+0

itertools를 사용하지 않고 그 모든 타이핑을 저장하지 않는 이유는 무엇입니까? – JudoWill

1

실제로 itertools 라이브러리와 생성기 기능을 사용하여이를 수행하는 매우 까다로운 방법이 있습니다.

from itertools import product, imap 

def stringdigit(num_digits=10, start = None): 
    """A generator function which returns string versions of a large iterated number with 
    leading zeros. start allows you to define a place to begin the iteration""" 
    treatfun = lambda x: ''.join(x) 
    for n in imap(treatfun, product('', repeat = num_digits)): 
     if start == None or n > start: 
      yield n 

이렇게하면 필요한 "제로 패딩 된 문자열 형식"을 반환하는 반복기가 만들어집니다. iterable에서 반복 된 조합을 "정렬 된 순서"로 반복적으로 반환하는 제품 기능을 사용하여 작동합니다. num_digits 인수는 반환 할 총 자릿수를 지정합니다. start은 반복을 시작할 위치를 지정합니다 (예 : 1111111에서 시작하려는 경우).

product은 Python 2.6 릴리스와 함께 제공됩니다. 어떤 이유로 든 그 전에 무엇인가를 사용한다면 이것을 제품 정의로 사용하십시오. 문서 here에서 가져 왔습니다.

def product(*args, **kwds): 
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy 
    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 
    pools = map(tuple, args) * kwds.get('repeat', 1) 
    result = [[]] 
    for pool in pools: 
     result = [x+[y] for x in result for y in pool] 
    for prod in result: 
     yield tuple(prod) 

당신은 interator로에 대한 루프에서이 기능을 사용할 수 있습니다

for num in stringdigit(num_digits = 7): 
    #do stuff with num 

희망을. -Will