[英]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.