Python 프로그래밍

[Python] 문자열 출력 Formatting

DayOff 2022. 4. 21. 15:38

% Formatting

print 포맷팅에서%s는 문자열 데이터 타입의 값을%d는 정수형 데이터 타입 값의 출력을 의미한다.

name1 = "김민수" 
age1 = 10
name2 = "이철희"
age2 = 13
print("이름: %s 나이: %d" % (name1, age1))
print("이름: %s 나이: %d" % (name2, age2))

 

format() Method

  문자열의 포맷 메서드는 타입과 상관없이 값이 출력될 위치에 { }를 적어주면 된다. format( ) 안의 순서대로 출력되게 된다. 

name1 = "김민수" 
age1 = 10
name2 = "이철희"
age2 = 13
print("이름: {} 나이: {}".format(name1, age1))
print("이름: {} 나이: {}".format(name2, age2))

 

f-string

  f-string은 파이썬 3.6부터 지원하며 문자열 앞에 f가 붙은 형태이다. f-string을 사용하면 {변수} 와 같은 형태로 문자열 사이에 타입과 상관없이 값을 출력할 수 있다.

name1 = "김민수" 
age1 = 10
name2 = "이철희"
age2 = 13
print(f"이름: {name1} 나이: {age1}")
print(f"이름: {name2} 나이: {age2}")

 

다양한 Formatting 예제

 

Padding, Aligning

# 1. 오른쪽 정렬
string = 'test'
print('%10s' % (string))
print('{:>10}'.format(string))
print(f'{string:>10}')

# 1. 출력
      test
      test
      test
      

# 2. 왼쪽 정렬
string = 'test'
print('%-10s' % (string))
print('{:10}'.format(string))
print(f'{string:10}')

# 2. 출력
test      
test      
test


# 3. Padding을 공백 대신 특정 문자로 채우기
string = 'test'
print('{:*>10}'.format('test'))
print(f'{string:*>10}')
print('{:*<10}'.format('test'))
print(f'{string:*<10}')

# 3. 출력
******test
******test
test******
test******

 

문자열 자르기

# 1. 문자열 길이 5개로 제한
string = 'xylophone'
print('%-.5s' % (string))
print('{:.5}'.format(string))
print(f'{string:.5}')

# 1. 출력
xylop
xylop
xylop

 

숫자 출력

# 1. float 출력 (float는 소수 6자리까지 표현)
number = 3.141592653589793
print('%f' % (number))
print('{:f}'.format(number))
print(f'{number:f}'.format(number))
print(f'{number}')

# 1. 출력
3.141593
3.141593
3.141593
3.141592653589793


# 2. 소수 아래 2자리까지만 출력
number = 3.141592653589793
print('%.2f' % (number))
print('{:.2f}'.format(number))
print(f'{number:.2f}')

# 2. 출력
3.14
3.14
3.14

# 3. Integer에 Padding 적용
number = 12
print('%04d' % (number))
print('{:04d}'.format(number))
print(f'{number:04d}')

# 3. 출력
0012
0012
0012


# 4. 양수에 +를 함께 출력
number = 12
print('%+04d' % (number))
print('{:+04d}'.format(number))
print(f'{number:+04d}')

# 4. 출력
+012
+012
+012

 

str, repr 출력

class Comedian:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def __str__(self):
        return f"{self.first_name} {self.last_name} is {self.age}."

    def __repr__(self):
        return f"{self.first_name} {self.last_name} is {self.age}. Surprise!"

new_comedian = Comedian("Eric", "Idle", "74")
print("%s" % (new_comedian))
print("%r" % (new_comedian))

print("{0!s}".format(new_comedian))
print("{0!r}".format(new_comedian))

print(f'{new_comedian}')
print(f'{new_comedian!r}')

# 출력
Eric Idle is 74.
Eric Idle is 74. Surprise!
Eric Idle is 74.
Eric Idle is 74. Surprise!
Eric Idle is 74.
Eric Idle is 74. Surprise!

 

Named placeholder

data = {'first': 'Hodor', 'last': 'Hodor!'}
print('%(first)s %(last)s' % data)
print('{first} {last}'.format(**data))

# 출력
Hodor Hodor!
Hodor Hodor!

# 3.2 이상 버전에서 아래도 적용 가능
print('{first} {last}'.format_map(data))
# 출력
Hodor Hodor!

 

Get item, Get attribute

# 1. 아이템을 객체로 부터 가져와서 formatting에 적용하는 예제입니다. 
# f-string의 경우 내부에서 map의 key를 입력할 때 '(작은따옴표)을 사용하기 때문에 문자열은 "(큰따옴표)로 표현해야 합니다. (반대로 적용해도 됩니다.)

person = {'first': 'Jean-Luc', 'last': 'Picard'}
print('{p[first]} {p[last]}'.format(p=person))
print(f"{person['first']} {person['last']}")

# 1. 출력
Jean-Luc Picard
Jean-Luc Picard


# 2. 배열에 대한 예제
data = [4, 8, 15, 16, 23, 42]
print('{d[4]} {d[5]}'.format(d=data))
print(f'{data[4]} {data[5]}')

# 2. 출력
23 42
23 42


# 3. 클래스에 대한 예제
class Plant(object):
    type = 'tree'
    kinds = [{'name': 'oak'}, {'name': 'maple'}]

print('{p.type}: {p.kinds[0][name]}'.format(p=Plant()))

p = Plant()
print(f"{p.type}: {p.kinds[0]['name']}")

# 3. 출력
tree: oak
tree: oak

 

Datetime

from datetime import datetime

print('{:%Y-%m-%d %H:%M}'.format(datetime(2001, 2, 3, 4, 5)))
date = datetime(2001, 2, 3, 4, 5)
print(f"{date:%Y-%m-%d %H:%M}")

# 출력
2001-02-03 04:05
2001-02-03 04:05

 

Parameterized format

# 1. 정렬과 padding을 적용하는 예제
p_align = '^'
p_width = '10'
string = 'test'
print('{:{align}{width}}'.format(string, align=p_align, width=p_width))
print(f'{string:{p_align}{p_width}}')

# 1. 출력
   test   
   test   
   

# 2. datetime에 적용한 예제
from datetime import datetime
dt = datetime(2001, 2, 3, 4, 5)
print('{:{dfmt} {tfmt}}'.format(dt, dfmt='%Y-%m-%d', tfmt='%H:%M'))
print(f'{dt:{"%Y-%m-%d"} {"%H:%M"}}')

# 2. 출력
2001-02-03 04:05
2001-02-03 04:05

 

[출처] : https://codechacha.com/ko/python-string-formatting/