Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 데이터 값을 문자열로 보간하는 방법은 무엇입니까?

<시간/>

다양한 형식을 사용하여 데이터 값을 문자열로 보간할 수 있습니다. 이것을 사용하여 코드를 추론하고 보고서, 양식 및 기타 출력을 생성할 수 있습니다. 이 주제에서는 문자열 형식을 지정하는 세 가지 방법과 데이터 값을 문자열로 보간하는 방법을 살펴봅니다.

파이썬에는 문자열 형식을 지정하는 세 가지 방법이 있습니다.

  • % - 오래된 학교(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.

이 스타일은 사전의 일부 따옴표를 제거하기 때문에 약간 덜 시끄럽습니다. 형식 지정자에 꽤 많은 문자가 있지만 그다지 매력적이지 않습니다.