Python格式说明符能否用空格?如何替换填充字符为空格/ASCII符号
问题描述
我编写了如下Python打印语句:
print("#"*80) print(f"##{'':.^76}##") print(f"##{'Hello World':.^76}##") print(f"##{'':.^76}##") print("#"*80)
运行后可生成带点填充的Hello World边框效果:
################################################################################ ##............................................................................## ##................................Hello World.................................## ##............................................................................## ################################################################################
但将格式说明符中的.替换为空格时,会触发ValueError: Invalid format specifier异常。请问如何将填充字符替换为空格或其他ASCII符号?
解决方案
问题出在f-string格式说明符的写法上:你用.作为填充字符时,其实是隐式触发了字符串的小数点填充逻辑,但直接替换成空格或其他符号时,语法就不符合规范了。
正确的写法是在对齐符号(^/</>)之前,显式指定单个填充字符,格式为{目标内容:填充字符对齐方式宽度}。
替换为空格的示例代码
print("#"*80) print(f"##{'': ^76}##") # 空格填充,居中对齐,总宽度76 print(f"##{'Hello World': ^76}##") print(f"##{'': ^76}##") print("#"*80)
运行效果:
################################################################################ ## ## ## Hello World ## ## ## ################################################################################
替换为其他ASCII符号的示例(比如*)
print("#"*80) print(f"##{'':*^76}##") print(f"##{'Hello World':*^76}##") print(f"##{'':*^76}##") print("#"*80)
运行效果:
################################################################################ ##****************************************************************************## ##**************************Hello World**************************## ##****************************************************************************## ################################################################################
注意:填充字符只能是单个字符,如果传入多个字符会直接抛出格式错误异常。
内容的提问来源于stack exchange,提问作者MaKaNu
相关产品推荐
相关产品推荐

