python中字符串的打印长度
有没有办法在python中找到字符串的“打印”长度(即使是最好的猜测)?例如,“potaa\bto”在python中字符串的打印长度,python,string,pretty-print,tty,Python,String,Pretty Print,Tty,有没有办法在python中找到字符串的“打印”长度(即使是最好的猜测)?例如,“potaa\bto”在len中为8个字符,但在tty上仅打印6个字符宽 预期用途: s = 'potato\x1b[01;32mpotato\x1b[0;0mpotato' len(s) # 32 plen(s) # 18 至少对于ANSI TTY转义序列,这是有效的: import re strip_ANSI_pat = re.compile(r""" \x1b # literal ESC
len
中为8个字符,但在tty上仅打印6个字符宽
预期用途:
s = 'potato\x1b[01;32mpotato\x1b[0;0mpotato'
len(s) # 32
plen(s) # 18
至少对于ANSI TTY转义序列,这是有效的:
import re
strip_ANSI_pat = re.compile(r"""
\x1b # literal ESC
\[ # literal [
[;\d]* # zero or more digits or semicolons
[A-Za-z] # a letter
""", re.VERBOSE).sub
def strip_ANSI(s):
return strip_ANSI_pat("", s)
s = 'potato\x1b[01;32mpotato\x1b[0;0mpotato'
print s, len(s)
s1=strip_ANSI(s)
print s1, len(s1)
印刷品:
potato[01;32mpotato[0;0mpotato 32
potatopotatopotato 18
对于backspaces\b或垂直制表符或\r-vs\n--这取决于打印方式和位置,不是吗 字符串的打印长度取决于字符串的类型 Python2.x中的普通字符串采用utf-8格式。utf-8的长度为 等于字符串中的字节数。将类型更改为unicode,len() 现在交付打印的标志。因此,格式化工作:
bashshell有着完全相同的需求,以便在提示字符串中存在不可打印字符的情况下,知道用户键入的输入何时换行到下一行。他们的解决方案是甚至不尝试——相反,他们要求任何设置提示字符串的人在提示的非打印部分周围放置
\[
和\]
。打印长度被计算为字符串的长度,这些特殊序列和它们之间的所有文本都被过滤掉。(当然,输出中省略了特殊序列。)我正在寻找一个更通用的解决方案。。。除了我的示例之外,还有许多其他非打印字符。是的,这取决于如何和在哪里,我想。。。这只是为了进行漂亮的打印/制表,所以如果有时出现错误,你可能会涉入其中……什么是“abc”
的plen
?“123\t456”
怎么样<代码>“12345\r67”<代码>“123456\n789”<代码>“123456\r78\n9abcd”?基本上,你必须决定你的角色集的规则并编写一个算法。这真是一个困难的过程。我尝试了不同的方法,包括一些subprocess.Popen(…).communicate()
尝试,但没有效果。
value = 'abcäöücdf'
len_value = len(value)
len_uvalue = len(unicode(value,'utf-8'))
size = self['size'] + len_value-len_uvalue
print value[:min(len(value),size)].ljust(size)