目前,我正在开发一个程序。我希望它增加5个字符的字母数字值。 (很抱歉,如果增量不是正确的单词。)
所以我想让程序说从55aa0开始,到99zz9结束。我希望它从55aa0开始而不是00aa0开始的原因是因为对于我正在做的事情,这是浪费时间。
我还想将该值分配给一个变量,并将其附加到另一个变量的末尾,并调用该URL。
因此,例如,该网址可能是:domain.de/69xh2
如果您需要更多信息,我会很乐意添加。
count = 0
while count <= n:
url = ""
if url.endswith(".jpg"):
fileType = ".jpg"
elif url.endswith(".png"):
fileType = ".png"
if os.path.isfile("images/" + fileName):
pass
else:
urllib.urlretrieve(url, "images/" + count + fileType)
count = count + 1
最佳答案
这听起来像是itertools
的工作:
from itertools import dropwhile, islice, product
from string import digits, ascii_lowercase as letters
def values():
"""Yield strings in format '00aa0', starting with '55aa0'."""
def pred(t):
"""Return False once second digit in tuple t reaches '5'."""
return t[1] < '5'
for t in dropwhile(pred, product(digits[5:], digits, letters,
letters, digits)):
yield "".join(t)
首先(根据西蒙的建议使用
list(islice(values(), 0, 21))
):['55aa0', '55aa1', '55aa2', '55aa3', '55aa4', '55aa5',
'55aa6', '55aa7', '55aa8', '55aa9', '55ab0', '55ab1',
'55ab2', '55ab3', '55ab4', '55ab5', '55ab6', '55ab7',
'55ab8', '55ab9', '55ac0']
为此使用
itertools
的优点是您不必在内存中构建整个列表(304,200个元素),但可以对其进行迭代:for s in values():
# use s
请注意,此版本与您的要求紧密相关(向Krab提示以提高效率),但可以轻松对其进行修改以更广泛地使用。
还是更快的版本,再次来自Krab的建议:
def values():
"""Yield strings in format '00aa0', starting with '55aa0'."""
for t in product(map(str, range(55, 100)), letters, letters, digits):
yield "".join(t)
注意:在Python 2.x中使用
xrange
和itertools.imap
。关于python - 如何增加字母数字值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20926491/