다양한 형식을 사용하여 데이터 값을 문자열로 보간할 수 있습니다. 이것을 사용하여 코드를 추론하고 보고서, 양식 및 기타 출력을 생성할 수 있습니다. 이 주제에서는 문자열 형식을 지정하는 세 가지 방법과 데이터 값을 문자열로 보간하는 방법을 살펴봅니다.
파이썬에는 문자열 형식을 지정하는 세 가지 방법이 있습니다.
-
% - 오래된 학교(Python 2 및 3에서 지원됨)
-
() - 새로운 스타일(Python 2.6 이상)
-
{} - f-문자열(Python 3.6 이상)
이전 스타일:%
이전 스타일의 문자열 형식은 format_string % 데이터 형식입니다. 형식 문자열은 보간 시퀀스에 불과합니다.
구문 | 설명 |
---|---|
%s | 문자열 |
%d | 십진수 |
%x | 헥사 정수 |
%o | 8진수 정수 |
%f | 십진수 부동 |
%e | 지수 부동 소수점 |
%g | 십진수 또는 지수 부동 소수점 |
%% | 리터럴 % |
# printing integer with % style type. print('output \nprinting a number in string format %s' % 42) print('printing a number in string decimal %d' % 42) print('printing a number in string hexa-int %x' % 42) print('printing a number in string exponential-float %g' % 42)
출력
printing a number in string format 42 printing a number in string decimal 42 printing a number in string hexa-int 2a printing a number in string exponential-float 42
이전 형식 %의 문자열 및 정수 보간
문자열 내부의 %s는 문자열을 보간한다는 의미입니다. 문자열에 나타나는 %의 수는 문자열 다음에 오는 % 이후의 데이터 항목 수와 일치해야 합니다.
단일 데이터 항목은 마지막 % 바로 뒤에 있습니다. 여러 데이터는 튜플로 그룹화해야 합니다. 아래 예를 참조하세요.
%와 유형 지정자 사이의 형식 문자열에 다른 값을 추가하여 최소 및 최대 너비, 정렬 및 문자 채우기를 지정할 수도 있습니다.
1. + means right-align 2. - means left-align 3. . means separate minwidth and maxchars. 4. minwidth means mimimu field width to use 5. maxchars means how many characters/digits to print from the data value
player = 'Roger Federer' country = 'Legend' titles = 20 # note please try this only on Python 2. If you are running on Python3 output for below commands will vary a lot. print('Output \n*** Tennis player %s From %s had won %d titles ' %(player,country,titles)) print('%s' % player) # print player print('%5s' % player) # print firstname of player print('%-7s' % player) # Last Name of player print('%5.7s' % player) # Last Name of player with 5 leading spaces
출력
*** Tennis player Roger Federer From Legend had won 20 titles Roger Federer Roger Federer Roger Federer Roger F
새 스타일을 사용한 문자열 및 정수 보간:{}
Python 3.5 이상 버전을 사용하는 경우 아래 섹션에 설명된 "새 스타일" 형식을 사용할 수 있습니다.
"{}" 형식 지정에는 format_string.format(data)과 같은 구문이 있습니다.
format() 함수에 대한 인수는 형식 문자열의 {} 자리 표시자와 같은 순서로 있어야 한다는 점을 기억하세요. 가독성을 높이기 위해 사전이나 명명된 인수를 형식에 전달할 수 있습니다.
player = 'Roger Federer' player = 'Roger_Federer' country = 'Legend' titles = 20 print('Output \n{}'.format(player)) print(' *** Tennis player {} From {} had won {} titles '.format(player,country,titles)) # positonal arguments print(' *** Tennis player {1} From {2} had won {0} titles '.format(titles,player,country)) # named arguments print(' *** Tennis player {player} From {country} had won {titles} titles '.format(player = 'Roger Federer',country = 'Legend',titles = 20)) # Dictionary arguments print(' *** Tennis player {player} From {country} had won {titles} titles '.format(player = 'Roger Federer',country = 'Legend',titles = 20)) # alignment left '<' (default) print(' *** Tennis player {} From {:<5s} had won {:<5d} titles '.format(player,country,titles)) # alignment left '<' (default) print(' *** Tennis player {} From {:<5s} had won {:<5d} titles '.format(player,country,titles)) # alignment center '^' print(' *** Tennis player {} From {:^10s} had won {:^10d} titles '.format(player,country,titles)) # alignment right '>' print(' *** Tennis player {} From {:>10s} had won {:>10d} titles '.format(player,country,titles))
출력
Roger_Federer *** Tennis player Roger_Federer From Legend had won 20 titles *** Tennis player Roger_Federer From Legend had won 20 titles *** Tennis player Roger Federer From Legend had won 20 titles *** Tennis player Roger Federer From Legend had won 20 titles *** Tennis player Roger_Federer From Legend had won 20 titles *** Tennis player Roger_Federer From Legend had won 20 titles *** Tennis player Roger_Federer From Legend had won 20 titles *** Tennis player Roger_Federer From Legend had won 20 titles
최신 스타일의 문자열 및 정수 보간:f-문자열
f-문자열은 Python 3.6에 등장했으며 곧 권장되는 문자열 형식 지정 방법이 되었습니다. 개인적으로 저는 이 형식을 사용합니다. f-문자열을 만들려면:
1. 시작/첫 따옴표 앞에 문자 f/F를 사용합니다.
2. 변수 이름 또는 표현식을 중괄호({}) 안에 포함하여 해당 값을 문자열로 가져옵니다.
player = 'Roger_Federer' country = 'Legend' titles = 20 print(f"Output \n *** Tennis player {player} From {country} had won {titles} titles ") print(f" *** I hope {player} wins another {titles - 10} titles ") print(f" {'*' * 3} Tennis player {player.upper()} From {country:.^10} had won {titles} titles")
출력
*** Tennis player Roger_Federer From Legend had won 20 titles *** I hope Roger_Federer wins another 10 titles *** Tennis player ROGER_FEDERER From ..Legend.. had won 20 titles
이제 기본 사항을 다루었으므로 몇 가지 실시간 문제와 형식화된 문자열 사용을 권장하는 이유에 대해 알아보겠습니다.
titles = [ ('federer', 20), ('nadal', 20), ('djokovic', 17), ] print('Output\n') for i, (player, titles) in enumerate(titles): print('#%d: %-10s = %d' % ( i + 1, player.title(), round(titles)))
출력
#0: federer = 20 #1: nadal = 20 #2: djokovic = 17
분명히 상위에 리포터를 보낼 때 인덱스가 0에서 시작하는 것을 원하지 않고 1에서 시작하기를 원했습니다. 로저 페더러는 테니스의 전설이기 때문에 개인적으로 # 0 대신 # 1로 표현하고 싶었습니다.
이제 변경하려면 이전 형식을 사용하는 동안 코드의 가독성이 어떻게 변경되는지 확인하십시오.
titles = [ ('federer', 20), ('nadal', 20), ('djokovic', 17), ] print('Output\n') for i, (player, titles) in enumerate(titles): print('#%d: %-10s = %d' % ( i + 1, player.title(), round(titles)))
출력
#1: Federer = 20 #2: Nadal = 20 #3: Djokovic = 17
결론적으로, 나는 f-문자열이 관리하기 더 쉬운 이유를 보여주는 예를 제공했습니다.
old_school_formatting = ( ' Tennis Legeng is %(player)s, ' ' %(player)s had won %(titles)s titles, ' 'and he is from the country %(country)s.') old_formatted = old_school_formatting % { 'player': 'Roger Federer', 'titles': 20, 'country': 'Swiss', } print('Output\n' + old_formatted)
출력
Tennis Legeng is Roger Federer, Roger Federer had won 20 titles, and he is from the country Swiss.
new_formatting = ( ' Tennis Legeng is {player}, ' ' {player} had won {titles} titles, ' 'and he is from the country {country}') new_formatted = new_formatting.format( player= 'Roger Federer', titles= 20, country= 'Swiss', ) print('Output\n' + new_formatted)
출력
Tennis Legeng is Roger Federer, Roger Federer had won 20 titles, and he is from the country Swiss.
이 스타일은 사전의 일부 따옴표를 제거하기 때문에 약간 덜 시끄럽습니다. 형식 지정자에 꽤 많은 문자가 있지만 그다지 매력적이지 않습니다.