파이썬으로 한글이 포함된 문자열을 print 시 format이 잘 맞지 않는 문제가 발생할 때가 있는데요.
예를 들면 다음과 같죠.
- 코드
print("%-30s %-30s" % (pairValue, myValue))
- 결과
================================================================================= 1. Korea KRW 2. 미국 USD 3. 유럽연합 EUR 4. 일본 JPY (100엔) 5. 중국 CNY 6. 홍콩 HKD 7. 대만 TWD 8. 영국 GBP 9. 오만 OMR 10. 캐나다 CAD 11. 스위스 CHF 12. 스웨덴 SEK 13. 호주 AUD 14. 뉴질랜드 NZD 15. 체코 CZK 16. 칠레 CLP 17. 터키 TRY 18. 몽골 MNT 19. 이스라엘 ILS 20. 덴마크 DKK 21. 노르웨이 NOK 22. 사우디아라비아 SAR 23. 쿠웨이트 KWD 24. 바레인 BHD 25. 아랍에미리트 AED 26. 요르단 JOD 27. 이집트 EGP 28. 태국 THB 29. 싱가포르 SGD 30. 말레이시아 MYR 31. 인도네시아 IDR 100 32. 카타르 QAR 33. 카자흐스탄 KZT 34. 브루나이 BND 35. 인도 INR 36. 파키스탄 PKR 37. 방글라데시 BDT 38. 필리핀 PHP 39. 멕시코 MXN 40. 브라질 BRL 41. 베트남 VND 100 42. 남아프리카 공화국 ZAR 43. 러시아 RUB 44. 헝가리 HUF =================================================================================
해결책은 다음과 같구요.
- 참고 URL : 전각 문자와 반각 문자가 섞였을 때 정렬하기 (http://gnoownow10.cafe24.com/cjk-formatting.html)
- 다음과 같은 함수 사용
import unicodedata def preformat_cjk (string, width, align='<', fill=' '): count = (width - sum(1 + (unicodedata.east_asian_width(c) in "WF") for c in string)) return { '>': lambda s: fill * count + s, '<': lambda s: s + fill * count, '^': lambda s: fill * (count / 2) + s + fill * (count / 2 + count % 2) }[align](string)
위 함수를 적용하여 다시 print 해볼께요.
- 코드
print("%s %s" % (preformat_cjk(pairValue, 30), preformat_cjk(myValue, 30)))
- 결과
================================================================================= 1. Korea KRW 2. 미국 USD 3. 유럽연합 EUR 4. 일본 JPY (100엔) 5. 중국 CNY 6. 홍콩 HKD 7. 대만 TWD 8. 영국 GBP 9. 오만 OMR 10. 캐나다 CAD 11. 스위스 CHF 12. 스웨덴 SEK 13. 호주 AUD 14. 뉴질랜드 NZD 15. 체코 CZK 16. 칠레 CLP 17. 터키 TRY 18. 몽골 MNT 19. 이스라엘 ILS 20. 덴마크 DKK 21. 노르웨이 NOK 22. 사우디아라비아 SAR 23. 쿠웨이트 KWD 24. 바레인 BHD 25. 아랍에미리트 AED 26. 요르단 JOD 27. 이집트 EGP 28. 태국 THB 29. 싱가포르 SGD 30. 말레이시아 MYR 31. 인도네시아 IDR 100 32. 카타르 QAR 33. 카자흐스탄 KZT 34. 브루나이 BND 35. 인도 INR 36. 파키스탄 PKR 37. 방글라데시 BDT 38. 필리핀 PHP 39. 멕시코 MXN 40. 브라질 BRL 41. 베트남 VND 100 42. 남아프리카 공화국 ZAR 43. 러시아 RUB 44. 헝가리 HUF =================================================================================