파이썬에서 문자열의 "인쇄 된"길이를 (심지어 가장 추측해도) 찾을 수있는 방법이 있습니까? 예 : 'potaa \ bto'는 len
에서는 8 자이지만, tty에는 6 자까지만 인쇄됩니다.파이썬에서 문자열의 인쇄 된 길이
예상 사용은 :
s = 'potato\x1b[01;32mpotato\x1b[0;0mpotato'
len(s) # 32
plen(s) # 18
파이썬에서 문자열의 "인쇄 된"길이를 (심지어 가장 추측해도) 찾을 수있는 방법이 있습니까? 예 : '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
\[ # 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 - 인쇄 방법과 인쇄 위치에 따라 다릅니다.
문자열의 인쇄 된 길이는 문자열의 유형에 따라 다릅니다.
파이썬 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()'시도를 포함하여 다른 접근법을 시도했지만 아무 소용이 없다. –