簡體   English   中英

在python中生成字母數字字符串

[英]Generate alphanumeric string in python

我正在遵循這個SO答案,因為我需要一個一個地生成一個順序字符串。 我以Django形式使用它,因此我需要增加它。 但是,我無法使其正常工作。我所獲得的每次刷新都是AAAA00000。

這是代碼:

from string import ascii_uppercase

def _format(value, lettercount=5, digitcount=5):
    upper, lower = divmod(value, 10 ** digitcount)
    letters = []
    for i in range(lettercount):
        upper, val = divmod(upper, 26)
        letters.insert(0, ascii_uppercase[val])
    return '%s%0*i' % (''.join(letters), digitcount, lower)

def lettercounter(lettercount=5, digitcount=5):
    for i in range((26 ** lettercount) * (10 ** digitcount)):
        yield  _format(i, lettercount, digitcount)

然后在我看來:

#this is when the page loads.
addcodegenerate = codegenerate(initial={'id_gen': lettercounter()})

並且我的文本字段中顯示的值是:

<generator object lettercounter at 0x038E4AA8>

每次加載頁面時0x0 ...部分都會更改,因此我假設我得到了一個不同的值,但是這是我作為輸出獲得的值。

我還在單獨的.py文件中嘗試過它,但也沒有任何輸出。

每次加載頁面時,它都會增加。.像AAAAA00000,AAAAA00001 ....

更改0x0部分的情況是, codegenerate (我不知道它的確切含義或在代碼的上下文中實際調用的方式)時,都會產生一個新的/新的lettercounter生成器實例回來。 您可以通過在定義生成器的模塊中專門創建它的新實例:

lettercounter_inst = lettercounter()

然后,您實際上需要從生成器函數中獲取next字符串值,而不是讓代碼(在codegenerate內部)將該對象轉換為字符串(這是導致生成器的原始repr表達式出現在文本字段中的原因)。 像這樣:

addcodegenerate = codegenerate(initial={'id_gen': next(lettercounter_inst)})

但是,在django的情況下,我假設您要保留用戶提交的結果,最好是依賴數據庫或構造與之關聯的模型,然后具有將相關的自動增量值轉換為您想要的字母數字字符串。

每次調用視圖時,您都在創建一個新的生成器。 您需要創建一次生成器,然后在視圖中對其進行引用。 例如:

# Outside the view
incrementing_letters = letter_counter

# Inside the view
addcodegenerate = codegenerate(initial={'id_gen': incrementing_letters})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM