Python学习笔记:print对齐之ljust、rjust、center
2022/8/9 1:24:24
本文主要是介绍Python学习笔记:print对齐之ljust、rjust、center,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
日常工作中常常需要打印日志,进行查看、调试,有时打印日志很长而长度不一致的话,查阅起来难免没那么直观,遂诞生寻找控制打印长度的函数。例如:ljust
、rjust
、center
等。
一、ljust、rjust、center方法
这3个方法都可以设定对齐长度,填充特定字符。
- 语法
String.ljust(width[, fillchar]) String.rjust(width[, fillchar]) String.center(width[, fillchar])
- 参数
String: 待填充字符串 width: 总长度 fillchar: 可选参数 默认空格
- 实例
text1 = '我是最帅的!' print(text1) # 我是最帅的! print(text1.ljust(20)) # 我是最帅的! -- 靠左 填充空格 print(text1.rjust(20)) # 我是最帅的!-- 靠右 填充空格 print(text1.center(20)) # 我是最帅的! -- 居中 左右填充空格 print(text1.ljust(20, '*')) # 我是最帅的!************** print(text1.rjust(20, '*')) # **************我是最帅的! print(text1.center(20, '*')) # *******我是最帅的!******* # 指定字符填充
二、使用format方法
text2 = '我是最帅的!' print(text2) print(format(text2, '<20')) # 我是最帅的! -- 靠左 print(format(text2, '>20')) # 我是最帅的!-- 靠右 print(format(text2, '^20')) # 我是最帅的! -- 居中
三、中英文混合字符串长度bug
text1 = '我是好人!' text2 = 'Good!' print(len(text1)) # 5 print(len(text2)) # 5 print(text1.ljust(20, '*')) print(text2.ljust(20, '*')) ''' 我是好人!*************** Good!*************** ''' # 长度一致 但实际显示不一致
因为 ljust
将每一个中文字符看成一个字符,但实际一个中文字符输出所占的空间相当于2个英文字符,导致显示的长度不一致。
简单的解决办法,在输出的英文表达式将宽度增加 len(string)
即可。
print(text1.ljust(20, '*')) print(text2.ljust(20+len(text1), '*')) ''' 我是好人!*************** Good!******************** ''' # 也是不太对,感叹号导致,待持续优化?
四、中英文混合字符串(持续优化)
计算待填充字符中,英文和中文的字符个数,分别进行填充。
英文字符可以使用英文空格,中文空格为 chr(12288)
。
# 是否为中文 def is_Chinese(string): if '\u4e00' <= string <= '\u9fff': return True return False # is_Chinese('我') # True
def print_align(string, max_len, _type='L', pad=' '): ''' 中英文混合字符串对齐函数 string: 需要对齐的字符串 max_len: 对齐长度 _type: 对齐方式 L左、R右、其他居中 pad: 填充字符 ''' str_len = len(string) # 原始长度 for i in str(string): if is_Chinese(i): # 判断是否中文 中文长度 +1 str_len += 1 # pad_len = max_len - str_len # 计算需要填充的长度 if _type == 'L': _left = 0 _right = pad_len elif _type == 'R': _left = pad_len _right = 0 else: _left = pad_len // 2 _right = pad_len - _left return pad * _left + string + pad * _right print(print_align("a一二三",20, pad='*')) print(print_align("aa一二三", 20, pad='*')) print(print_align("aaaaaa一二三", 20, pad='*')) print(print_align("a一二三aa", 20, pad='*')) ''' a一二三************* aa一二三************ aaaaaa一二三******** a一二三aa*********** '''
始终存在一个问题,虽然打印出来的长度一致,但显示上,总会存在一丢丢视觉误差!
弃之!
参考链接:使用python3输出print对齐的方法
参考链接:Python字符串对齐方法(ljust()、rjust()和center())详解
参考链接:Python中的字符串中的ljust和rjust对于中文的bug
参考链接:python中英文混合字符串对齐
参考链接:中英文混合字符串的对齐
这篇关于Python学习笔记:print对齐之ljust、rjust、center的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南