Python 3.4.3에서 string.format () 연산자를 사용하여 일부 필드의 너비를 정렬하려고했는데 너비 합계에 대해 길이가 0 인 제어 문자를 계산하는 것처럼 보입니다. 샘플 코드 :
ANSI_RED = "\033[31m"
ANSI_DEFAULT="\033[39m\033[49m"
string1 = "12"
string2 = ANSI_RED+"12"+ANSI_DEFAULT
print("foo{:4s}bar".format(string1))
print("foo{:4s}bar".format(string2))
그러면 다음이 출력됩니다.
foo12 bar
foo12bar
(두 번째 출력은 '12'가 빨간색으로 표시되지만 SO에서는 재현 할 수 없습니다.)
두 번째 경우에는 필드 너비를 잃어 버렸습니다. 파이썬이 문자열의 총 문자 수가 너비보다 크다는 것을 보았 기 때문에 대부분의 문자가 ANSI 규격 터미널에서 길이가 0이 되었음에도 불구하고 생각합니다.
ANSI 색상과 작업 필드 너비를 갖는 깨끗한 방법은 무엇입니까?
ANSI 색상과 작업 필드 너비를 갖는 깨끗한 방법은 무엇입니까?
불행히도 표시되는 필드 너비를 얻으려면 이스케이프 시퀀스를 제거해야합니다.
이 len()
함수는 Python 2 str 유형의 바이트 수와 Python 3 str 유형의 코드 포인트 수를 반환합니다. 이 길이는 디스플레이 너비와 일치한다고 보장 된 적이 없습니다 (더 어려운 문제).
>>> s = 'abc\bde'
>>> print s
abcde
>>> len(s)
6
일반적으로 디스플레이가 코드를 해석하는 방법에 대해 알지 않는 한 특정 디스플레이 너비를 알 수 없습니다 (즉, 장치가 ANSI 이스케이프 시퀀스를 지원하는지 여부에 따라 너비가 다릅니다).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다