파이썬 형식 문자열에서 % s는 무엇을 의미합니까?


166

%s파이썬에서 무엇을 의미합니까? 그리고 다음 코드 비트는 무엇을합니까?

예를 들어 ...

 if len(sys.argv) < 2:
     sys.exit('Usage: %s database-name' % sys.argv[0])

 if not os.path.exists(sys.argv[1]):
     sys.exit('ERROR: Database %s was not found!' % sys.argv[1])

4
%연산자는 더 강력한 찬성되지 않습니다 str.format방법을 참조 PEP-3101 .
Paulo Scardine

35
실제로 PEP는 "Python 3.0에서 % 연산자는 더 강력한 문자열 형식화 방법으로 보완된다"고 말하고 Python 2.6으로 백 포트됩니다. 내가 "보충"에서 온 것은 대체되지 않고 추가되는 것을 의미합니다. PEP는 "supplanted"라고 말하지 않으며 PEP의 어느 부분에서도 % 연산자가 더 이상 사용되지 않는다고 말하지 않습니다 (그러나 다른 것들은 아래쪽에서 더 이상 사용되지 않습니다). str.format을 선호 할 수도 있지만 괜찮습니다 .PEP가 더 이상 사용되지 않는다고 말할 때까지 그렇지 않다고 주장하는 것은 의미가 없습니다.
Ben

답변:


198

문자열 형식화 구문입니다 (C에서 빌림).

"PyFormat"을 참조하십시오 :

파이썬은 값을 문자열로 포맷하는 것을 지원합니다. 여기에는 매우 복잡한 표현식이 포함될 수 있지만 가장 기본적인 사용법은 %s자리 표시자를 사용 하여 문자열에 값을 삽입하는 것 입니다.

편집 : 다음은 정말 간단한 예입니다.

#Python2
name = raw_input("who are you? ")
print "hello %s" % (name,)

#Python3+
name = input("who are you? ")
print("hello %s" % (name,))

%s토큰은 나 문자열을 삽입 (잠재적 포맷) 할 수 있습니다. 것을 알 %s토큰이 난 후 문자열에 전달 무엇으로 대체 %기호. 또한 여기에 튜플을 사용하고 있습니다 (튜플을 사용하여 하나의 문자열 만 선택 사항 인 경우)는 여러 문자열을 하나의 문에 삽입하고 서식을 지정할 수 있음을 보여줍니다.


11
이러한 종류의 문자열 보간은 더 강력한 str.format방법 을 위해 더 이상 사용되지 않습니다 .
Paulo Scardine

6
python3에서 raw_input ()은 이제 스스로 시도하는 사람들을 위해 input ()입니다.
Gothburz 2016 년

1
(name,), 그리고 단지 name?
카메론 허드슨

111

앤드류의 대답은 좋습니다.

조금 더 도움을주기 위해 한 문자열에서 여러 형식을 사용하는 방법은 다음과 같습니다.

"Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike".

문자열 대신 정수를 사용하는 경우 % s 대신 % d를 사용하십시오.

"My name is %s and i'm %d" % ('john', 12) #My name is john and i'm 12

2
좋은. % d는 str (int)를 캐스팅하지 못하게합니다. % s와 % d이 (가) 무엇을 상징하는지 아십니까? 나는 그것들을 문자열과 숫자로 기억할 것이라고 생각합니다.
user391339

1
@ user391339는 십진수를 나타냅니다 :) 그들은 모두 여기에 있습니다 docs.python.org/2/library/…
sqram

나는 이전 버전에 대해서는 알지 못하지만 적어도 3.6에서는 %s정수 를 사용하더라도 동일하게 작동 하며 문자열로 변환됩니다.
lapin

@lapin 당신이 맞습니다 :). 그러나 항상 원하는 것은 아닙니다. 예를 들어 숫자를 채우고 싶다고 가정 해보십시오. print('This number will be padded with 4 zeros: %05d ' % 1)-이 작동합니다. print('This number will be padded with 4 zeros: %05s ' % 1)-이것은 아니다
sqram

28

format방법은 Python 2.6에서 도입되었습니다. 더 유능하고 사용하기가 훨씬 어렵지 않습니다.

>>> "Hello {}, my name is {}".format('john', 'mike')
'Hello john, my name is mike'.

>>> "{1}, {0}".format('world', 'Hello')
'Hello, world'

>>> "{greeting}, {}".format('world', greeting='Hello')
'Hello, world'

>>> '%s' % name
"{'s1': 'hello', 's2': 'sibal'}"
>>> '%s' %name['s1']
'hello'

11
이 답변은 질문의 구문이 텍스트의 서식을 지정 하고 새로운 방법 보여 주면 개선 될 것 입니다. 그렇게해서 저절로 설 수있었습니다. 질문의 예와 동등한 예를 제공하는 것도 플러스 일 것입니다.
Steve S

13

%s파이썬의 문자열 형식화 기능을 사용할 때 문자열 의 변환 유형을 나타냅니다 . 보다 구체적으로, 함수를 %s사용하여 지정된 값을 문자열로 변환 str()합니다. 값 변환에 함수를 %r사용 하는 변환 유형 과 이것을 비교하십시오 repr().

문자열 형식 에 대한 문서를 살펴보십시오 .


13

%s%d형식 지정 또는 자리는 포맷 스트링 / 소수 / 수레 등을위한

가장 많이 사용되는 형식 지정자 :

%s : 문자열

%d : 소수

%f : 플로트

자기 설명 코드 :

name = "Gandalf"
extendedName = "the Grey"
age = 84
IQ = 149.9
print('type(name):', type(name)) #type(name): <class 'str'>
print('type(age):', type(age))   #type(age): <class 'int'>   
print('type(IQ):', type(IQ))     #type(IQ): <class 'float'>   

print('%s %s\'s age is %d with incredible IQ of %f ' %(name, extendedName, age, IQ)) #Gandalf the Grey's age is 84 with incredible IQ of 149.900000 

#Same output can be printed in following ways:


print ('{0} {1}\'s age is {2} with incredible IQ of {3} '.format(name, extendedName, age, IQ))          # with help of older method
print ('{} {}\'s age is {} with incredible IQ of {} '.format(name, extendedName, age, IQ))          # with help of older method

print("Multiplication of %d and %f is %f" %(age, IQ, age*IQ)) #Multiplication of 84 and 149.900000 is 12591.600000          

#storing formattings in string

sub1 = "python string!"
sub2 = "an arg"

a = "i am a %s" % sub1
b = "i am a {0}".format(sub1)

c = "with %(kwarg)s!" % {'kwarg':sub2}
d = "with {kwarg}!".format(kwarg=sub2)

print(a)    # "i am a python string!"
print(b)   # "i am a python string!"
print(c)    # "with an arg!"
print(d)   # "with an arg!"

6

두 번째 질문에 대한 답변으로 :이 코드는 무엇을합니까? ...

이것은 명령 행 인수를 허용하는 Python 스크립트의 표준 오류 검사 코드입니다.

그래서 첫 번째 if진술은 다음과 같이 번역됩니다. 만약 당신이 나에게 논쟁을 건네주지 않았다면, 앞으로 당신이 나에게 어떻게 논쟁을 건네 야하는지 말해 줄 것입니다.

Usage: myscript.py database-name

다음 if명령문은 스크립트에 전달한 'database-name'이 실제로 파일 시스템에 존재하는지 확인합니다. 그렇지 않은 경우 다음과 같은 메시지가 나타납니다.

ERROR: Database database-name was not found!

로부터 문서 :

argv [0]은 스크립트 이름입니다 (전체 경로 이름인지 여부에 따라 운영 체제에 따라 다름). 인터프리터에 -c 명령 행 옵션을 사용하여 명령을 실행 한 경우 argv [0]은 문자열 '-c'로 설정됩니다. Python 인터프리터에 스크립트 이름이 전달되지 않은 경우 argv [0]은 빈 문자열입니다.


2

다음은 Python3의 좋은 예입니다.

  >>> a = input("What is your name?")
  What is your name?Peter

  >>> b = input("Where are you from?")
  Where are you from?DE

  >>> print("So you are %s of %s" % (a, b))
  So you are Peter of DE
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.