23

文字列の部分文字列を他のテキストに置き換える最良の方法について、いくつかの意見を求めたいと思います。次に例を示します。

「こんにちは、私の名前は $name です」のような文字列 a があります。別の文字列 b もあり、これを文字列 a の部分文字列 '$name' の代わりに挿入します。

置き換え可能な変数が何らかの方法で示されていると、最も簡単だと思います。私はドル記号を使用しましたが、中かっこの間の文字列など、最も適切だと思われるものであれば何でもかまいません。

解決策: これが私がそれを行うことにした方法です:

from string import Template


message = 'You replied to $percentageReplied of your message. ' + 
    'You earned $moneyMade.'

template = Template(message)

print template.safe_substitute(
    percentageReplied = '15%',
    moneyMade = '$20')
4

6 に答える 6

56

これを行う最も一般的な方法は次のとおりです。

>>> import string
>>> t = string.Template("Hello my name is $name")
>>> print t.substitute(name='Guido')
Hello my name is Guido

>>> t = "Hello my name is %(name)s"
>>> print t % dict(name='Tim')
Hello my name is Tim

>>> t = "Hello my name is {name}"
>>> print t.format(name='Barry')
Hello my name is Barry

string.Templateを使用するアプローチは習得が容易であり、bash ユーザーにはなじみがあるはずです。エンドユーザーに公開するのに適しています。このスタイルは Python 2.4 で利用可能になりました。

パーセント スタイルは、他のプログラミング言語から来た多くの人になじみがあるでしょう。%(name)sの末尾に「s」があるため、% 演算子が乗算と同じ優先順位を持ち、適用された引数の動作がデータ型に依存するため (タプルと dict は特別なものになるため)、このスタイルがエラーを起こしやすいと感じる人もいます。取り扱い)。このスタイルは、最初から Python でサポートされています。

括弧スタイルは、Python 2.6 以降でのみサポートされています。これは最も柔軟なスタイルです (制御文字の豊富なセットを提供し、オブジェクトがカスタム フォーマッタを実装できるようにします)。

于 2012-05-03T17:56:37.777 に答える
11

これを行うにはいくつかの方法がありますが、より一般的に使用されるのは、文字列によって既に提供されている機能を使用する方法です。これは、%演算子の使用、またはさらに良いことに、より新しく推奨されるstr.format().

例:

a = "Hello my name is {name}"
result = a.format(name=b)

またはもっと簡単に

result = "Hello my name is {name}".format(name=b)

位置引数も使用できます。

result = "Hello my name is {}, says {}".format(name, speaker)

または明示的なインデックスを使用する場合:

result = "Hello my name is {0}, says {1}".format(name, speaker)

これにより、への呼び出しを変更せずに、文字列内のフィールドの順序を変更できますformat()

result = "{1} says: 'Hello my name is {0}'".format(name, speaker)

フォーマットは本当に強力です。括弧内に何を書くかによって、フィールドの幅、数字の書き方、およびその他の書式設定を決定するために使用できます。

置換がより複雑な場合は、str.replace()関数または正規表現 (モジュールから)を使用することもできます。re

于 2012-05-03T17:45:33.300 に答える
9

Python で replace() 関数をチェックアウトします。ここにリンクがあります:

http://www.tutorialspoint.com/python/string_replace.htm

これは、指定したテキストを置き換えようとするときに役立ちます。たとえば、リンクでは次のように表示されます。

str = "this is string example....wow!!! this is really string"
print str.replace("is", "was")

すべての単語について"is"、それを単語に置き換えます"was"

于 2012-05-03T17:37:07.833 に答える
8

実際、これはすでにモジュールに実装されていますstring.Template

于 2012-05-03T17:31:43.400 に答える
5

次のようなことができます:

"My name is {name}".format(name="Name")

ここでわかるように、Python でネイティブにサポートされています。

http://www.python.org/dev/peps/pep-3101/

于 2012-05-03T17:35:34.930 に答える
2

%でフォーマットを使用することもできますが、.format()はより新しいと見なされます。

>>> "Your name is %(name)s. age: %(age)i" % {'name' : 'tom', 'age': 3}
'Your name is tom'

ただし、通常の%フォーマットで知られているタイプチェックもサポートしています。

>>> '%(x)i' % {'x': 'string'}

Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    '%(x)i' % {'x': 'string'}
TypeError: %d format: a number is required, not str
于 2012-05-03T17:59:11.083 に答える