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'