[파이썬] 문자열 포맷팅과 부등식(feat.패딩)

반응형
    반응형

    문자열 패딩

    파이썬에서는 f-string이나 문자열 포맷팅으로 변수를 문자열에 삽입할 수 있는데 부등식 기호를 잘 쓰면 패딩 기능이 가능합니다.
    즉, 문자열의 최소 길이를 내가 지정할 수도 있고 패딩된 문자열 정렬을 지정할 수 있습니다.

    패딩정렬

    문자열로써 패딩을 하는 경우 컴퓨터는 부등식을 정렬로 받아들입니다. f-string으로 패딩을 쓰면 다음과 같이 쓰면 됩니다.

    f"{변수 또는 표현식:패딩정렬}"

    각 요소는 다음과 같습니다.

    • 변수 또는 표현식 : 포맷팅하고자 하는 값 또는 표현식
    • 패딩 : 필드의 최소 길이 지정. 길이를 넘지 않는 한도내에서 문자열이 채워집니다.
    • 정렬 : 패딩된 문자열을 어떻게 정렬할지 지정.
      • '<': 왼쪽 정렬(기본값)
      • '>' : 오른쪽 정렬
      • '^': 가운데 정렬

    예제를 보면 이해가 되실 겁니다.

    name = 'Alice'
    age = 100
    # 왼쪽 정렬, 최소 길이 10
    formatted_str = f"Name: {name:<10}, Age: {age:<10}"
    print(formatted_str)
    
    # 오른쪽 정렬, 최소 길이 10
    formatted_str = f"Name: {name:>10}, Age: {age:>10}"
    print(formatted_str)
    
    # 가운데 정렬, 최소 길이 10
    formatted_str = f"Name: {name:^10}, Age: {age:^10}"
    print(formatted_str)

    다음과 같이 부등식에 따라서 정렬이 완성되는데 그 글자수 제한이 10입니다. 10을 넘어가면 정렬이고 뭐고 하나도 되지 않습니다. 10의 제한은 안써지는게 아니라 정렬을 할 수 있는 범위를 의미함을 알 수 있습니다.

    아래 예제처럼 10글자가 넘어가면 정렬을 하지 않습니다.

    name = "Alice and bob yes!3333"
    age = 3000000000000000031313
    
    # 왼쪽 정렬, 최소 길이 10
    formatted_str = f"Name: {name:<10}, Age: {age:<10}"
    print(formatted_str)
    
    # 오른쪽 정렬, 최소 길이 10
    formatted_str = f"Name: {name:>10}, Age: {age:>10}"
    print(formatted_str)
    
    # 가운데 정렬, 최소 길이 10
    formatted_str = f"Name: {name:^10}, Age: {age:^10}"
    print(formatted_str)

    숫자 자릿수 늘리기

    과학에서 유효숫자를 넣곤 하는데 파이썬을 통해서 간단하게 구현할 수 있습니다. 왼쪽으로 자릿수를 늘리면 LPAD(Left padding) 이고 오른쪽으로 자릿수를 늘리면 RPAD(Rright padding)이라고 합니다.

    보통 0으로 자릿수를 늘리니깐 0을 기준으로 예제를 보여드리겠습니다.

    # 숫자 자릿수 늘리기
    number = 42
    
    # 숫자를 문자열로 변환하고, 최소 길이 5로 패딩을 적용합니다.
    formatted_number = f"{number:05}"
    print(formatted_number)

    위 코드에서 ':05'는 다음을 의미합니다.

    • '0' : 패딩 문자로 0을 사용한다는 것을 의미합니다.
    • '5' : 최소 자릿수를 나타냅니다. 즉, 최소 길이를 5로 만들겠다는 의미가 됩니다.

    최소길이를 소수점을 찍어보면 확실히 이해가 됩니다.

    # 숫자 자릿수 늘리기
    number = 4.2
    
    # 숫자를 문자열로 변환하고, 최소 길이 5로 패딩을 적용합니다.
    formatted_number = f"{number:05}"
    print(formatted_number)

    자릿수로 생각한다면 0004.2 으로 5자리로 할 것 같은게 그렇지 않습니다. 점도 한 글자로 받아들이기 때문에 점을 포함해 004.2가 다섯자리가 됩니다.

    이렇게 하면 소수는 자릿수를 생각하기가 어렵습니다.
    그래서 보통 .2f 와 같은 소수점 제한을 두는 방식으로 합니다. 

    문자열 포맷에 대한 설명은 아래 포스팅에서 확인해보시기 바랍니다.

     

     

     

    문자열 포맷 출력

    문자열 포맷 출력 형식입니다. 여러모로 유용하게 쓸 수 있는데 딕셔너리의 값을 가져와서 쓰는 걸로 보여드리겠습니다. 총 3개의 방식을 보여드릴텐데요. 다음과 같습니다. %기호 방식 {}기호

    seong6496.tistory.com

    부등식의 사용

    위와 같은 자릿수 지정에 부등식을 활용하면 보다 유연하게 지정을 할 수 있습니다. 여기서의 부등식은 자릿수를 할 방향을 말합니다.
    왼쪽으로 두고 싶다면 '>'으로 오른쪽으로 두고 싶다면 '<'으로 지정합니다.

    # 숫자 자릿수 늘리기
    number = 42
    
    formatted_number = f"{number:>07}"
    print(formatted_number)

    다음은 오른쪽으로 자릿수를 하는 경우입니다.

    # 숫자 자릿수 늘리기
    number = 42
    
    formatted_number = f"{number:<07}"
    print(formatted_number)

    소수점에서도 가능합니다.

    # 숫자 자릿수 늘리기
    number = 4.2
    
    # 숫자를 문자열로 변환하고, 최소 길이 5로 패딩을 적용합니다.
    formatted_number = f"{number:>04}"
    print(formatted_number)

    # 숫자 자릿수 늘리기
    number = 4.2
    
    formatted_number = f"{number:<04}"
    print(formatted_number)

    이런식으로 활용할 수 있습니다.

    참고로 패딩 문자를 0으로 했는데 그 밖에 문자는 문자 길이로 인식되기 때문에 자릿수를 메울수가 없습니다.

    number = 4.2
    
    formatted_number = f"{number:<14}"
    print(formatted_number)

    위와 같이 자릿수를 1을 채울 것을 기대하고 넣었지만 아무일도 일어나지 않습니다. 최소 문자길이가 14로 늘어나 위와 같이 자릿수가 늘어난 것을 알 수 있습니다.

    마치며

    문자열 포맷팅도 같은 방식으로 됩니다. 잘 활용한다면 얼마든지 괜찮게 쓸 수 있습니다.

     

    함께 보면 좋은 글

    [Python] 문자열(string) 다루기

    문자열 포맷 출력

    댓글

    Designed by JB FACTORY

    ....