Pythonで文字列の「印刷された」長さを見つける方法はありますか(最良の推測でも)?たとえば、「potaa \ bto」は8文字ですlen
が、ttyに印刷される幅は6文字だけです。
予想される使用法:
s = 'potato\x1b[01;32mpotato\x1b[0;0mpotato'
len(s) # 32
plen(s) # 18
Pythonで文字列の「印刷された」長さを見つける方法はありますか(最良の推測でも)?たとえば、「potaa \ bto」は8文字ですlen
が、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
バックスペース \b または垂直タブまたは \r 対 \n の場合 - それがどのように、どこで印刷されるかによって異なりますか?
文字列の出力される長さは、文字列のタイプによって異なります。
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)