9

Pythonで文字列の「印刷された」長さを見つける方法はありますか(最良の推測でも)?たとえば、「potaa \ bto」は8文字ですlenが、ttyに印刷される幅は6文字だけです。

予想される使用法:

s = 'potato\x1b[01;32mpotato\x1b[0;0mpotato'
len(s)   # 32
plen(s)  # 18
4

3 に答える 3

3

少なくとも 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

バックスペース \b または垂直タブまたは \r 対 \n の場合 - それがどのように、どこで印刷されるかによって異なりますか?

于 2013-02-15T06:47:13.183 に答える
0

文字列の出力される長さは、文字列のタイプによって異なります。

Python 2.x の通常の文字列は utf-8 です。utf-8 の長さは、String のバイト数と同じです。タイプを unicode に変更すると、len() は現在印刷された標識を提供します。したがって、フォーマットは機能します:

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)
于 2015-04-02T09:49:50.097 に答える