【问题标题】:How can I fix SyntaxError: invalid syntax when trying to pad zeros to a numeric string?如何修复 SyntaxError:尝试将零填充到数字字符串时语法无效?
【发布时间】:2026-02-05 16:00:01
【问题描述】:
for i in range(1,50): 
    path = if i < 10:
               url + '0' + str(i)
           else:
               url + str(i)

    df = pd.read_html(path)

在这种情况下,我得到了

SyntaxError: invalid syntax for 'if'.

如何修复此代码?

【问题讨论】:

标签: python string if-statement zero-padding


【解决方案1】:

保持简单明了,然后做:

if i < 10:
    path =   url + '0' + str(i)
else:
    path =  url + str(i)

或者,使用 Python 的 string formatting 功能来创建您的字符串。如果您想要一个最小长度为 2 个字符的零填充字符串,您可以使用以下格式:

>>> a = 3
>>> f'{a:0>2}'
'03'
>>> a = 33
>>> f'{a:0>2}'
'33'
>>> a = 333
>>> f'{a:0>2}'
'333'

【讨论】:

    【解决方案2】:

    您实际上想要“重新格式化”路径,将 i 转换为零填充字符串。 所以最自然的方法是只使用零填充格式,可访问 f_strings 中的其他内容。比如:

    for i in range(1,50):
        path = url + f'{i:02}'
        # Do with your path whatever you wish
    

    【讨论】:

    • 而是path = f'{url}{i:02}'
    【解决方案3】:

    如果您想在赋值中使用 if 语句,您可以执行以下操作:

    path = url + '0' + str(i) if i < 10 else url + str(i)
    

    因此您在循环中的代码将如下所示:

    for i in range(1,50):
        path = url + '0' + str(i) if i < 10 else url + str(i)
        df = pd.read_html(path)
        ...
    

    还有另一种方法可以实现您的目标。您需要将数字补零以使其成为2个字符,因此您可以使用str类的zfill方法。

    for i in range(1,50):
        padded_i = str(i).zfill(2)
        path = '{url}{id}'.format(url=url, id=padded_i)
        df = pd.read_html(path)
        ...
    

    你也可以使用传统的方式,但它不像以前的那么甜:

    for i in range(1, 50):
        if i < 10:
            i = '0' + str(i)
        else:
            i = str(i)
    
        path = url + i
        df = pd.read_html(path)
            ...
    

    【讨论】: