[Python] Byte calculation

정규식(Regular Expression)을 이용한 바이트 계산

며칠 전부터 몇 건의 Interface Error 가 산발적으로 발생했다. 알아보니 Destination 시스템으로 정보를 보낼 때, 상대 시스템 테이블 컬럼 속성이 VARCHAR(100)으로 잡혀있어 100 Byte 가 넘는 문자열이 전송되지 않는 오류였다. Oracle DB를 사용하고 있어서 LENGTHB() 함수를 사용해 100 byte 보다 긴 문자열을 가진 행을 골라내는 건 어렵지 않을텐데, 파이썬으로도 짜볼 수 있지 않을까? 싶어서 작성해봤다.

import re

if __name__ == "__main__":
    target_str = ""

    consonants = re.compile('[ㄱ-ㅎ]').findall(target_str)
    vowels = re.compile('[ㅏ-ㅣ]').findall(target_str)
    hanguel = re.compile('[가-힣]').findall(target_str)
    alphabets = re.compile('[a-z|A-Z]').findall(target_str)
    numbers = re.compile('\d').findall(target_str)
    speicals = re.compile('[^ A-Z|a-z|0-9|가-힣]').findall(target_str)
    spaces = re.compile('\s').findall(target_str)


    print(len(consonants), len(vowels), len(hanguel), len(speicals), len(alphabets), len(numbers), len(spaces))
    byte_num = len(consonants) * 3 + \
               len(vowels) * 3 + \
               len(hanguel) * 3 + \
               len(speicals) * 3 +\
               len(alphabets) + \
               len(numbers) + \
               len(spaces)

    print(byte_num)

생각보다 고려할 요소가 많았다. 한글 자음, 한글 모음, 한글, 알파벳, 특수문자, 그리고 생각하지 못 했던 공백까지! 꽤 재미있었다. 곧, Python 으로 Front-end 앱도 짤 수 있다고 하는데 앞단에서 이렇게 짜놓은 Snippet code 들을 익숙하게 찍어 넣을 수 있다면 아주 편리할 것 같다는 생각을 했다.

Updated:

Leave a comment