파이썬 문자열 빈공간 채우기 질문 드립니다.
조회수 1726회
안녕하세요
변수의 길이에 맞게 컬럼을 넣고싶은데 . 조언 부탁드리겠습니다.
예를 들어
총 8자리의 문자열에 텍스트를 넣고 우측정렬 한 후 나머지는 공백으로 채우려 합니다.
- 영어로 테스트를 했을 경우, 글자수만큼 빠지고 빈칸이 잘 채워지더라구요
A = ' test' (앞에 4칸 , test 4칸 - 총 8칸)
B='%8s'%A
len(B) = 8
print(B.encode('utf-8'))) = 8
- 한글로 테스트를 하면 공백+한글 더한 byte 수가 출력이 됩니다.
A = ' 테스트' (앞에 5칸 - 총 8칸)
B='%8s'%A
len(B) = 8
print(B.encode('utf-8'))) = 15 (8 + 6)
B='{0:0>8}'.format(A) rjsut 등 모두 해봐도 결과는 똑같습니다.
인코딩 문제인 것 같아 euckr로도 찍어봤는데, 한글 한 글자수가 1byte로 줄어들긴하나 8자리 안에는 들어오지 않고 8+1 이되어 9가 찍힙니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
from wcwidth import wcswidth def eaw_format_right(s, width, fill=' '): s_width = wcswidth(s) f_width = width - s_width if f_width < 0: f_width = 0 fill = (fill*f_width)[:f_width] return fill + s for txt in [ '코리아', 'korea' ]: print(eaw_format_right(txt, 8))
인코딩의 문제는 아니고, 한글이나 한자, 일본어 가나, 중국 간체자 등등 문자들이 일반적인 알파벳이나 기호의 두배의 자리를 차지하기 때문에 나오는 문제인 것 같고요. (east asian width 라고 부르는 듯 합니다.)
wcwidth
의wcswidth
함수를 이용해서, 문자열이 몇자리를 차지하는지를 계산해서 해야 하는 듯 합니다. 위 예제코드 실행해 보세요.
댓글 입력