• 2020. 6. 9.

    by. 윈썸지니

    반응형

    출처:pixabay

    이번 주제는 문자열 포맷팅(Formatting) 입니다.

     

    문자열 과 변수를 적절하게 섞어서 원하는 출력 문자열을 만들 경우 많이 사용합니다.

    예를 들면 사과는 과일입니다.” 여기서 사과라는 말을 다른 과일로 대체하여 망고 또는 배가 될 수 있습니다.

     

    사과만 다른 과일명으로 대체합니다. 이럴 경우 사용합니다.

    여기서 문자만 대체 하는 것이 아니고 국어 점수는 80점 입니다.” 여기서 학생마다 점수는 다르기 때문에 숫자만 변경 하기를 원할 경우등에 사용 될 수 있습니다.

    즉 문자열 포맷팅이란 문자열안에 어떤 갓을 삽입 또는 대체 하는 방법입니다.

     

    C언어의 printf() 와 비슷하게 사용되는데 파이썬 3 버전 부터는 format() 이란 메소드 사용을 권장합니다.

    C언어에 익숙하신 분들을 위해 먼저 예전 방법을 설명을 하고 그 다음 format() 에 대해 다루어 보면서 비교해 보겠습니다.

    아직 파이썬에서 아래 방법을 지원하고 있습니다.

    ## 직접 숫자를 넣었습니다.
    >>> "국어 점수는 %d 점 입니다" % 80
    '국어 점수는 80 점 입니다’
    ## 변수 선언을 해서 넣었습니다.
    >>> x = 80
    >>> "국어 점수는 %d 점 입니다." % x
    ## 직접 문자를 넣었습니다.
    '국어 점수는 80 점 입니다.'
    >>> "%s는 과일입니다." % '사과'
    '사과는 과일입니다.’
    ## 변수 선언을 해서 넣었습니다.
    >>> x = '사과'
    >>> "%s는 과일입니다." % x
    '사과는 과일입니다.'

     

    위의 예에서 숫자와 문자가 % 다음에 ds가 다르게 온다는 사실을 알았습니다.

    %d 는 숫자이고 %s는 문자열 입니다.

     

    이외에도 여러가지 자료형에 대해 % 다음에 오는 형태가 다릅니다.

    포맷팅 코드라고 하는데 이것에 대해 정리해봅니다.

    % Operator 설명
    %d 정수
    %f 부동소수
    %o 8진수
    %x 16진수
    %s 문자열
    %% % 자체
    >>> "원주율은 %f 입니다" % 3.14
    '원주율은 3.140000 입니다'
    >>> "원주율은 %s 입니다." % 3.14
    '원주율은 3.14 입니다.'
    >>> "원주율은 %d 입니다." % 3.14
    '원주율은 3 입니다.'
    >>> "합격율은 %d%% 입니다" % 88
    '합격율은 88% 입니다'
    >>>

     

    두개 이상의 값을 넣을 경우 입니다.

    >>> "%s 점수: %d 점" % ( '국어', 99 )
    '국어 점수: 99 점'
    >>> x = '수학'
    >>> y = 60
    >>> "%s 점수: %d 점" % ( x, y )
    '수학 점수: 60 점'
    >>>

     

    위의 예제 중 3.14 부동소수로 표현 할 경우 3.140000 이렇게 표현 된 것을 볼 수 있었습니다.

    그러면 소숫자리를 제어하고 싶어질 것 입니다.

    또한 숫자는 우측 정렬하여 출력하고 싶을 것입니다. % operator 사이에 숫자를 적절히 사용하여 할 수 있습니다.

    ## 10자 중 빈 공간은 공백으로 채우고 우측 정렬
    >>> "파이썬 버전은 %10s 입니다." % 3.6
    '파이썬 버전은 3.6 입니다.’

    ## 10자 중 빈 공간은 공백으로 채우고 좌측 정렬
    >>> "파이썬 버전은 %-10s 입니다." % 3.6
    '파이썬 버전은 3.6 입니다.’

    ## 소수점 2 자리까지 표현
    >>> "원주율은 %0.2f 입니다." % 3.14159
    '원주율은 3.14 입니다.’

    >>> "원주율은 %10.2f입니다" % 3.14159
    '원주율은 3.14입니다'
    >>> "원주율은 %-10.2f입니다." % 3.14159
    '원주율은 3.14 입니다.'

     

    이제 파이썬 3 버전 부터 지원하는 더 발전된 형태의 format() 메소드에 대한 내용입니다.

    ## {0}은 fortmat 다음에 첫번째 인수 입니다. 직접 값을 입력 가능합니다.
    >>> "{0} 점수는 {1}점 입니다.".format( '국어', 88 )
    '국어 점수는 88점 입니다.’

    ## 키=value 형식으로도 가능합니다. 가독성이 좀 더 좋아지겠지요!
    >>> "{gamok} 점수는 {value}점 입니다.".format( gamok='국어', value=88 )
    '국어 점수는 88점 입니다.'
    >>> gamok='국어'
    >>> value=88
    >>> "{0} 점수는 {1}점 입니다.".format( gamok, value )
    '국어 점수는 88점 입니다.'

     

    Format()을 사용하면서 이전에 해본 좌우측 정렬을 해 보겠습니다. Format은 가운데 정렬도 됩니다.

    ## 좌측 정렬로 10칸중 나머지는 공백으로 채웁니다. :<숫자 표현을 더 쓰면 됩니다.
    >>> "원주율은 {0:<10} 입니다.".format( 3.14 )
    '원주율은 3.14 입니다.’

    ## 우측 정렬이므로 > 로만 바꾸어 줍니다.
    >>> "원주율은 {0:>10} 입니다.".format( 3.14 )
    '원주율은 3.14 입니다.’

    ## 가운데 정렬은 ^를 사용합니다.
    >>> "원주율은 {0:^10} 입니다.".format( 3.14 )
    '원주율은 3.14 입니다.’

    ## 소수점 표현입니다. 전체 10 자리이고 기본 우측 정렬이며, 소수점 2 자리 사용하라는 뜻입니다.
    >>> "원주율은 {0:10.2f} 입니다.".format( 3.14159 )
    '원주율은 3.14 입니다.'
    >>> "원주율은 {0:>10.2f} 입니다.".format( 3.14159 )
    '원주율은 3.14 입니다.’

    ## 좌측 정렬로 바꿉니다.
    >>> "원주율은 {0:<10.2f} 입니다.".format( 3.14159 )
    '원주율은 3.14 입니다.'
    >>> "원주율은 {0:^10.2f} 입니다.".format( 3.14159 )
    '원주율은 3.14 입니다.’

    ## 10자리로 소수점 2자리 우측 정렬이며 나머지는 0으로 채웁니다.
    >>> "원주율은 {0:0>10.2f} 입니다.".format( 3.14159 )
    '원주율은 0000003.14 입니다.‘

    ## 특정 문자로 빈 공간을 채울 경우 : 다음에 채울 문자를 써 주면 됩니다.
    >>> "원주율은 {0:=>10} 입니다.".format( 3.14 )
    '원주율은 ======3.14 입니다.'
    >>> "원주율은 {0:=^10} 입니다.".format( 3.14 )
    '원주율은 ===3.14=== 입니다.'
    >>>

     

    파이썬 3.6 부터 지원하는 f 포매팅이 있습니다.

    이것의 좋은 점은 포매팅하면서 연산도 가능합니다.

    문자열 앞에 f 라고 붙이면 됩니다.

    >>> value = 88
    >>> f"원주율은 {value+1} 입니다."
    '원주율은 89 입니다.’

    >>> gamok = '국어'
    >>> value = 90
    >>> f"{gamok} 과목 점수는 {value+10} 점 입니다"
    '국어 과목 점수는 100 점 입니다'
    >>>

     

    응용편으로 f 포매팅에서 딕셔너리로 사용하는 법을 알아보고

    또한 정렬하는 법에 대해서도 같이 예제를 들어 보겠습니다.

    ## 딕셔너리 정의 입니다.
    >>> x = { 'gamok': '국어', 'value' : 88.1234 }

    ## 딕셔너리로 사용하는 예제 입니다.
    >>> f'{x["gamok"]} 과목 점수는 {x["value"]} 점 입니다'
    '국어 과목 점수는 88.1234 점 입니다’

    ## 정렬과 소수점 표현등의 예제 입니다. Format 과 사용법은 동일 합니다.
    >>> f'{x["gamok"]:<10} 과목 점수는 {x["value"]:10.2f} 점 입니다'
    '국어 과목 점수는 88.12 점 입니다'
    >>> f'{x["gamok"]:=^10} 과목 점수는 {x["value"]:0<10.2f} 점 입니다'
    '====국어==== 과목 점수는 88.1200000 점 입니다'
    >>> f'{x["gamok"]:=^10} 과목 점수는 {x["value"]:0>10.2f} 점 입니다'
    '====국어==== 과목 점수는 0000088.12 점 입니다'
    >>>

    지금까지 문자열 포맷팅하는 방법에 대해 포스팅 하였습니다.

    많이 사용되는 내용입니다. 그리고 가장 최신에 사용하는 방법으로 사용하는 것을 권장 드립니다.

    다음 포스팅은 아직 포스팅 못한 문자열에 대한 메소드를 포스팅 예정입니다.

    반응형