python的通用版本';支持任意填充符的s`str.zfill`?

python的通用版本';支持任意填充符的s`str.zfill`?,python,Python,str.zfill是用前导零填充字符串的有用工具: In [1]: '123'.zfill(5) Out[1]: '00123' 但是,是否有一个更通用的版本,可以使用任何填充字符并填充一个字符串?我在找这样的东西: In []: 'txt'.foo(' ', 5) Out[]: ' txt' In []: '12'.foo('#', 5) Out[]: '###12' 这样的功能存在吗 实现自己的版本应该足够简单: def xfill(string, num, filler='0')

str.zfill
是用前导零填充字符串的有用工具:

In [1]: '123'.zfill(5)
Out[1]: '00123'
但是,是否有一个更通用的版本,可以使用任何填充字符并填充一个字符串?我在找这样的东西:

In []: 'txt'.foo(' ', 5)
Out[]: '   txt'

In []: '12'.foo('#', 5)
Out[]: '###12'

这样的功能存在吗

实现自己的版本应该足够简单:

def xfill(string, num, filler='0'):
    if len(filler) != 1:
        raise TypeError('xfill() expected a character, but string of length %d found' %len(filler))
    return filler * max(0,  num - len(string)) + string
断言确保填充符仅为单个有效字符


xfill(字符串,num[,filler])

  • string
    :要填充的字符串

  • num
    :字段的总宽度(类似于
    str.zfill

  • 填充物
    :填充。默认设置为
    0
    以模拟
    str.zfill
    功能


  • 示例:

    In [321]: xfill('123', 5)
    Out[321]: '00123'
    
    In [322]: xfill('123', 5, '#')
    Out[322]: '##123'
    

    是的,有字符串对正方法和


    如果您只需要简单的填充,我会使用@PM2Ring的答案,但是还有另一种更通用的方法,使用
    str.format
    方法(Python2.6以后)。此方法允许通过嵌套替换字段插入格式说明符:

    '{string:{fill}>{num}}'.format(string=string, fill=fill, num=num)
    

    替换为
    ,为替代模式(而不仅仅是字符)增加一点灵活性:

    def filler(string, pattern, width):
        left_filler = (pattern * width)[:max(0, width - len(string))]
        return left_filler + string
    
    >>> filler(string='some text', pattern='*.', width=15)
    # Output:
    # '*.*.*.some text'
    
    >>> filler(string='some text', pattern='*.', width=14)
    # Output:
    # '*.*.*some text'
    

    @和雨燕同名的可能。。。我不知道如何使用这种格式:)@SwiftsNamesake把它变成一个答案!完成。为了取悦SO算法,这很好。我不知道
    str.xjust
    接受了第二个参数@我很惊讶这个问题以前从未被问过…@SwiftsNamesake我很惊讶vaultah没有用他的锤子猛扑到他神奇的飞毯上。在2.6中添加了
    str.format
    方法,我刚刚在2.6.6中成功测试了你的代码。是的,
    str.format
    已经存在了一段时间,但我认为它并不总是支持“动态”说明符;他们被提到了;FWIW,
    str.format
    从Python3向后移植到2.6。
    def filler(string, pattern, width):
        left_filler = (pattern * width)[:max(0, width - len(string))]
        return left_filler + string
    
    >>> filler(string='some text', pattern='*.', width=15)
    # Output:
    # '*.*.*.some text'
    
    >>> filler(string='some text', pattern='*.', width=14)
    # Output:
    # '*.*.*some text'