파이썬 문자열 빈공간 채우기 질문 드립니다.

조회수 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 라고 부르는 듯 합니다.) wcwidthwcswidth 함수를 이용해서, 문자열이 몇자리를 차지하는지를 계산해서 해야 하는 듯 합니다. 위 예제코드 실행해 보세요.

    • 우아.. 감사합니다. ㅠㅠ 구글링 열심히했는데 저기까지는 찾아보지 못했습니다. 많은 도움이 됐습니다. 알 수 없는 사용자 2019.6.21 09:23

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)