파이썬 문자열에서 어떻게 백분율 (%)을 이스케이프 처리 할 수 ​​있습니까?


364

다음 코드가 있습니다

test = "have it break."
selectiveEscape = "Print percent % in sentence and not %s" % test

print(selectiveEscape)

출력을 얻고 싶습니다.

Print percent % in sentence and not have it break.

실제로 일어나는 일 :

    selectiveEscape = "Use percent % in sentence and not %s" % test
TypeError: %d format: a number is required, not str

57
왜 그렇지 \%않습니까? 그것은 내 추측이었다. 나는 그것이 %%대신 발견된다는 것에 놀랐다 -꽤 반 직관적 인 것처럼 보인다.
Demis

3
% i"공백으로 채워진 정수의 10 진수 표현"을 의미합니다.
Antti Haapala 21

3
이스케이프는 언어 구문이 아니라 함수에 대한 것입니다. 따라서 이스케이프가 발생한 경우 \%실제로 \\%일반 코드로 작성했을 때와 같습니다. <escape><escape>내가 본 전형적인 패턴이며 \, 더 나은지 나쁜지 가장 일반적인 이스케이프 문자입니다.
shemnon

1
@Demis 그리고 \ 인쇄해야한다면 어떻게 탈출 \\%합니까? 특수 문자도 상황에 따라 특별하지 않은 경우 특수 문자 반복을 통해 이스케이프 처리해야합니다.
Sassa NF

2
파이썬에서 리터럴 %가 "\ %"가 아니라 "%%"에 의해 인코딩되는 것은 성가신 일이라고 생각합니다.
MasterControlProgram

답변:


625
>>> test = "have it break."
>>> selectiveEscape = "Print percent %% in sentence and not %s" % test
>>> print selectiveEscape
Print percent % in sentence and not have it break.

38
Python 3.3.5에서는을 print('%s%%' % 100)인쇄합니다 100%. 그러나 print('%%')인쇄합니다 %%. 따라서 대체하지 않으면 % 기호를 벗어날 필요가없는 것 같습니다.
Zenadix

5
@Zenadix 이것은 Python 2.7에서도 마찬가지입니다.
Tom

2
%메소드는 실제로 Python 3에서 더 이상 사용되지 않습니다 str.format(). docs.python.org/2/library/stdtypes.html#str.format
dantiston

8
%메소드는 Python 3.6에서 감가 상각되지 않습니다. c, c ++ 등과 유사한 점 대신에 계속 지원 str.format()되며 f- 문자열이 선호되지만 적용되지는 않습니다.
Aaron

문자열이 json 문자열이면 파일에서 읽 히면 %부호 를 벗어날 필요조차 없습니다 . 그냥 %할 것
wander95

57

또는 Python 2.6부터는 새로운 문자열 형식을 사용할 수 있습니다 ( PEP 3101에 설명되어 있음 ).

'Print percent % in sentence and not {0}'.format(test)

문자열이 더 복잡해지면 특히 편리합니다.


+1, op가 % 기반 답변을 찾고 있다고 생각하면서 format요즘 에는 사용하는 것이 훨씬 좋습니다 .
Nolen Royalty

2
이것에 대한 유일한 문제는 서식을 지정할 텍스트가 CSS 스타일 섹션이있는 HTML 인 경우입니다.
Broseph

CSS 스타일 섹션 @Broseph가 포함 된 텍스트 서식 HTML에 권장하는 것은 무엇입니까?
DucRP

1
내가 틀렸어. CSS에 이중 괄호를 사용하면 괜찮습니다.
Broseph


5

다음 문자에 따라 항상 특별한 의미를 가지 %므로 선택적으로 이스케이프 할 수 없습니다 %.

에서 문서 파이썬, 해당 섹션에서 두 번째 테이블의 bottem에서, 그것은 상태 :

'%'        No argument is converted, results in a '%' character in the result.

따라서 다음을 사용해야합니다.

selectiveEscape = "Print percent %% in sentence and not %s" % (test, )

(에 대한 인수로 튜플의 급행 변경 사항에 유의하십시오 %)

위의 내용을 알지 못하면 나는했을 것입니다 :

selectiveEscape = "Print percent %s in sentence and not %s" % ('%', test)

이미 알고있는 지식으로


3

형식 지정 템플릿을 파일에서 읽은 경우 내용이 백분율 기호를 두 배로 늘릴 수없는 경우 백분율 문자를 감지하여 자리 표시 자의 시작인지 여부를 프로그래밍 방식으로 결정해야합니다. 그런 다음 파서는 또한 %d(및 사용 가능한 다른 문자)와 같은 시퀀스를 인식해야합니다 %(xxx)s.

텍스트에 중괄호가 포함될 수있는 새로운 형식에서도 비슷한 문제가 발생할 수 있습니다.


1

당신이 사용하는 경우 파이썬 3.6 이상을, 당신이 사용할 수있는 F-문자열 :

>>> test = "have it break."
>>> selectiveEscape = f"Print percent % in sentence and not {test}"
>>> print(selectiveEscape)
... Print percent % in sentence and not have it break.

-3

서브 플롯 제목을 인쇄하는 다른 방법을 시도했지만 작동 방식을 살펴보십시오. 라텍스를 사용할 때 다릅니다.

일반적인 경우 '%%'및 'string'+ '%'와 함께 작동합니다.

라텍스를 사용하면 'string'+ '\ %'

따라서 일반적인 경우 :

import matplotlib.pyplot as plt
fig,ax = plt.subplots(4,1)
float_number = 4.17
ax[0].set_title('Total: (%1.2f' %float_number + '\%)')
ax[1].set_title('Total: (%1.2f%%)' %float_number)
ax[2].set_title('Total: (%1.2f' %float_number + '%%)')
ax[3].set_title('Total: (%1.2f' %float_number + '%)')

%가 포함 된 제목 예

라텍스를 사용하는 경우 :

import matplotlib.pyplot as plt
import matplotlib
font = {'family' : 'normal',
        'weight' : 'bold',
        'size'   : 12}
matplotlib.rc('font', **font)
matplotlib.rcParams['text.usetex'] = True
matplotlib.rcParams['text.latex.unicode'] = True
fig,ax = plt.subplots(4,1)
float_number = 4.17
#ax[0].set_title('Total: (%1.2f\%)' %float_number) This makes python crash
ax[1].set_title('Total: (%1.2f%%)' %float_number)
ax[2].set_title('Total: (%1.2f' %float_number + '%%)')
ax[3].set_title('Total: (%1.2f' %float_number + '\%)')

우리는 이것을 얻습니다 : %와 라텍스가있는 제목 예제

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.