目前,我正在开发一个程序。我希望它增加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中使用xrangeitertools.imap

关于python - 如何增加字母数字值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20926491/

10-10 01:10