Pythonで文字列の "印刷"長さ(最高の推測さえ)を見つける方法はありますか?例えば。 'potaa \ bto'はlen
では8文字ですが、ttyには6文字しか表示されません。Pythonでの文字列の長さの印刷
予想される使用:
s = 'potato\x1b[01;32mpotato\x1b[0;0mpotato'
len(s) # 32
plen(s) # 18
Pythonで文字列の "印刷"長さ(最高の推測さえ)を見つける方法はありますか?例えば。 'potaa \ bto'はlen
では8文字ですが、ttyには6文字しか表示されません。Pythonでの文字列の長さの印刷
予想される使用:
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 vs \ n - それはどこでどのように印刷されるのですか?
文字列の印刷長さは、文字列の種類によって異なります。
Python 2.xの通常の文字列はutf-8です。 utf-8の長さは、Stringのバイト数に等しい です。タイプをユニコードに変更すると、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)
ネヴァーマインド、私はquestiom –
' "ABC"' 'のplen'は何を読み違え? '' 123 \ t456 "'についてはどうですか? '' 12345 \ r67 "'? '" 123456 \ n789 "'? '' 123456 \ r78 \ n9abcd "'?基本的には、キャラクタセットのルールを決めてアルゴリズムを書く必要があります。 –
これは本当に難しいものです。私はいくつかの 'subprocess.Popen(...)。communicate()'を試みるなど、さまざまなアプローチを試みましたが、役に立たなかった。 –