web-dev-qa-db-ja.com

Python文字列のパーセント(%)を選択的にエスケープする方法を教えてください。

私は以下のコードを持っています

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
308
jondykeman
>>> test = "have it break."
>>> selectiveEscape = "Print percent %% in sentence and not %s" % test
>>> print selectiveEscape
Print percent % in sentence and not have it break.
543
Nolen Royalty

あるいは、Python 2.6以降、新しい文字列フォーマットを使うことができます( PEP 3101 で説明されています):

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

文字列が複雑になるので、これは特に便利です。

52
Karmel

%記号を印刷するために%%を使ってみてください。

33
openmeet123

%は常に次の文字によって特別な意味を持つため、%を選択的にエスケープすることはできません。

Pythonの ドキュメンテーション では、そのセクションの2番目のテーブルの一番下に、次のように述べています。

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

したがって、あなたは使うべきです:

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

%の引数としてTupleへの有効期限の変更に注意してください)

上記のことを知らなくても、私はしたはずです。

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

あなたが明らかにすでに持っていた知識を使って。

5
Anthon

フォーマットテンプレートがファイルから読み取られたもので、内容がパーセント記号を2倍にすることが確実でない場合は、おそらくパーセント文字を検出し、それがプレースホルダの先頭かどうかをプログラムで判断する必要があります。そうすれば、パーサーは%d(および使用可能な他の文字)のようなシーケンスだけでなく%(xxx)sなどのシーケンスも認識するはずです。

新しいフォーマットでも同様の問題が発生する可能性があります - テキストに中括弧を含めることができます。

3
pepr