7.1. string —一般的な文字列操作—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/string
移動先:案内検索

7.1。 ストリング —一般的な文字列操作

ソースコード: :source: `Lib / string.py`



string モジュールには、いくつかの便利な定数とクラス、および文字列のメソッドとしても使用できる非推奨のレガシー関数が含まれています。 さらに、Pythonの組み込み文字列クラスは、シーケンスタイプ— str、unicode、list、tuple、bytearray、buffer、xrange セクションで説明されているシーケンスタイプメソッド、およびで説明されている文字列固有のメソッドをサポートします。 文字列メソッドセクション。 フォーマットされた文字列を出力するには、テンプレート文字列、または文字列フォーマット操作セクションで説明されている%演算子を使用します。 また、正規表現に基づく文字列関数については、 re モジュールを参照してください。

7.1.1。 文字列定数

このモジュールで定義されている定数は次のとおりです。

string.ascii_letters
以下で説明する ascii_lowercase 定数と ascii_uppercase 定数の連結。 この値はロケールに依存しません。
string.ascii_lowercase
小文字'abcdefghijklmnopqrstuvwxyz'。 この値はロケールに依存せず、変更されません。
string.ascii_uppercase
大文字'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。 この値はロケールに依存せず、変更されません。
string.digits
文字列'0123456789'
string.hexdigits
文字列'0123456789abcdefABCDEF'
string.letters
以下に説明する文字列小文字大文字の連結。 特定の値はロケールに依存し、 locale.setlocale()が呼び出されたときに更新されます。
string.lowercase
小文字と見なされるすべての文字を含む文字列。 ほとんどのシステムでは、これは文字列'abcdefghijklmnopqrstuvwxyz'です。 特定の値はロケールに依存し、 locale.setlocale()が呼び出されたときに更新されます。
string.octdigits
文字列'01234567'
string.punctuation
Cロケールで句読文字と見なされるASCII文字の文字列。
string.printable
印刷可能と見なされる文字列。 これは、文字句読点、および空白の組み合わせです。
string.uppercase
大文字と見なされるすべての文字を含む文字列。 ほとんどのシステムでは、これは文字列'ABCDEFGHIJKLMNOPQRSTUVWXYZ'です。 特定の値はロケールに依存し、 locale.setlocale()が呼び出されたときに更新されます。
string.whitespace
空白と見なされるすべての文字を含む文字列。 ほとんどのシステムでは、これには文字スペース、タブ、改行、リターン、フォームフィード、および垂直タブが含まれます。


7.1.2。 カスタム文字列フォーマット

バージョン2.6の新機能。


組み込みのstrクラスとunicodeクラスは、 PEP 3101 で説明されている str.format()メソッドを介して複雑な変数置換と値フォーマットを実行する機能を提供します。 string モジュールの Formatter クラスを使用すると、組み込みの format()メソッドと同じ実装を使用して、独自の文字列フォーマット動作を作成およびカスタマイズできます。

class string.Formatter

Formatter クラスには、次のパブリックメソッドがあります。

format(format_string, *args, **kwargs)

主要なAPIメソッド。 これは、フォーマット文字列と、位置引数およびキーワード引数の任意のセットを取ります。 vformat()を呼び出すのは単なるラッパーです。

vformat(format_string, args, kwargs)

この関数は、フォーマットの実際の作業を行います。 *argsおよび**kwargs構文を使用して辞書を個別の引数としてアンパックおよび再パックするのではなく、事前定義された引数のディクショナリを渡したい場合のために、別個の関数として公開されます。 vformat()は、フォーマット文字列を文字データと置換フィールドに分割する作業を行います。 以下に説明するさまざまなメソッドを呼び出します。

さらに、 Formatter は、サブクラスに置き換えることを目的としたいくつかのメソッドを定義しています。

parse(format_string)

format_stringをループして、反復可能なタプル( literal_textfield_nameformat_specConversion )を返します。 これは、 vformat()によって使用され、文字列をリテラルテキストまたは置換フィールドに分割します。

タプルの値は、概念的には、リテラルテキストのスパンとそれに続く単一の置換フィールドを表します。 リテラルテキストがない場合(2つの置換フィールドが連続して発生する場合に発生する可能性があります)、 literal_text は長さがゼロの文字列になります。 置換フィールドがない場合、 field_nameformat_spec 、および Conversion の値はNoneになります。

get_field(field_name, args, kwargs)

parse()(上記を参照)によって返される field_name を指定して、フォーマットするオブジェクトに変換します。 タプル(obj、used_key)を返します。 デフォルトバージョンは、「0 [name]」や「label.title」など、 PEP 3101 で定義された形式の文字列を取ります。 argskwargs は、 vformat()に渡されたとおりです。 戻り値 used_key は、 get_value()key パラメーターと同じ意味です。

get_value(key, args, kwargs)

指定されたフィールド値を取得します。 key 引数は整数または文字列のいずれかになります。 整数の場合は、 args の位置引数のインデックスを表します。 文字列の場合は、 kwargs の名前付き引数を表します。

args パラメーターは vformat()の位置引数のリストに設定され、 kwargs パラメーターはキーワード引数の辞書に設定されます。

複合フィールド名の場合、これらの関数はフィールド名の最初のコンポーネントに対してのみ呼び出されます。 後続のコンポーネントは、通常の属性およびインデックス作成操作によって処理されます。

したがって、たとえば、フィールド式「0.name」により、 get_value()key 引数0で呼び出されます。 name属性は、組み込みの getattr()関数を呼び出して、 get_value()が戻った後に検索されます。

インデックスまたはキーワードが存在しないアイテムを参照している場合は、IndexErrorまたはKeyErrorを上げる必要があります。

check_unused_args(used_args, args, kwargs)

必要に応じて、未使用の引数のチェックを実装します。 この関数の引数は、フォーマット文字列(位置引数の整数、名前付き引数の文字列)で実際に参照されたすべての引数キーのセットであり、引数およびへの参照です。 vformatに渡されたkwargs 。 未使用の引数のセットは、これらのパラメーターから計算できます。 check_unused_args()は、チェックが失敗した場合に例外を発生させると見なされます。

format_field(value, format_spec)

format_field()は、単にグローバル format()ビルトインを呼び出します。 このメソッドは、サブクラスがオーバーライドできるように提供されています。

convert_field(value, conversion)

変換タイプ( parse()メソッドによって返されるタプルのように)を指定して、値( get_field()によって返される)を変換します。 デフォルトバージョンは、「s」(str)、「r」(repr)、および「a」(ascii)変換タイプを理解します。


7.1.3。 フォーマット文字列構文

str.format()メソッドと Formatter クラスは、フォーマット文字列に対して同じ構文を共有します(ただし、 Formatter の場合、サブクラスは独自のフォーマットを定義できます)文字列構文)。

フォーマット文字列には、中括弧{}で囲まれた「置換フィールド」が含まれています。 中括弧に含まれていないものはすべてリテラルテキストと見なされ、変更されずに出力にコピーされます。 リテラルテキストに中括弧文字を含める必要がある場合は、{{}}を2倍にすることでエスケープできます。

置換フィールドの文法は次のとおりです。

  replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"
  field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
  arg_name          ::=  [identifier | integer]
  attribute_name    ::=  identifier
  element_index     ::=  integer | index_string
  index_string      ::=  <any source character except "]"> +
 変換        ::=  "r" | "s"
  format_spec       ::=  <described in the next section>

あまり正式ではありませんが、置換フィールドは、置換フィールドの代わりに値がフォーマットされて出力に挿入されるオブジェクトを指定する field_name で始めることができます。 field_name の後には、オプションで、感嘆符'!'が前に付いた conversion フィールドと、前に付いた format_spec が続きます。コロン':'。 これらは、置換値のデフォルト以外の形式を指定します。

フォーマット仕様ミニ言語セクションも参照してください。

field_name 自体は、数値またはキーワードのいずれかである arg_name で始まります。 数値の場合は位置引数を参照し、キーワードの場合は名前付きキーワード引数を参照します。 フォーマット文字列内の数値arg_namesが0、1、2、…の順序である場合、それらはすべて(一部だけでなく)省略でき、数字0、1、2、…はこの順序で自動的に挿入されます。 arg_name は引用符で区切られていないため、フォーマット文字列内で任意の辞書キー(たとえば、文字列'10'または':-]')を指定することはできません。 arg_name の後には、任意の数のインデックス式または属性式を続けることができます。 '.name'形式の式は、 getattr()を使用して名前付き属性を選択し、'[index]'形式の式は、__getitem__()を使用してインデックスルックアップを実行します。

バージョン2.7で変更: str.format()およびunicode.format()の位置引数指定子は省略できるため、'{} {}''{0} {1}'u'{} {}'u'{0} {1}'と同等です。


いくつかの単純なフォーマット文字列の例:

"First, thou shalt count to {0}"  # References first positional argument
"Bring me a {}"                   # Implicitly references the first positional argument
"From {} to {}"                   # Same as "From {0} to {1}"
"My quest is {name}"              # References keyword argument 'name'
"Weight in tons {0.weight}"       # 'weight' attribute of first positional arg
"Units destroyed: {players[0]}"   # First element of keyword argument 'players'.

Conversion フィールドは、フォーマットする前に型強制を引き起こします。 通常、値をフォーマットする作業は、値自体の__format__()メソッドによって実行されます。 ただし、場合によっては、型を文字列として強制的にフォーマットし、それ自体のフォーマットの定義をオーバーライドすることが望ましい場合があります。 __format__()を呼び出す前に値を文字列に変換することにより、通常のフォーマットロジックがバイパスされます。

現在、2つの変換フラグがサポートされています。値に対して str()を呼び出す'!s'と、 repr()を呼び出す'!r'です。

いくつかの例:

"Harold's a clever {0!s}"        # Calls str() on the argument first
"Bring out the holy {name!r}"    # Calls repr() on the argument first

format_spec フィールドには、フィールド幅、配置、パディング、小数精度などの詳細を含む、値の表示方法の仕様が含まれています。 各値型は、独自の「フォーマットミニ言語」または format_spec の解釈を定義できます。

ほとんどの組み込み型は、次のセクションで説明する一般的なフォーマットのミニ言語をサポートしています。

format_spec フィールドには、ネストされた置換フィールドを含めることもできます。 これらのネストされた置換フィールドには、フィールド名、変換フラグ、およびフォーマット指定が含まれる場合がありますが、より深いネストは許可されていません。 format_spec内の置換フィールドは、 format_spec 文字列が解釈される前に置換されます。 これにより、値のフォーマットを動的に指定できます。

いくつかの例については、フォーマットの例セクションを参照してください。

7.1.3.1。 フォーマット仕様ミニ言語

「フォーマット仕様」は、フォーマット文字列内に含まれる置換フィールド内で使用され、個々の値の表示方法を定義します(フォーマット文字列構文を参照)。 また、組み込みの format()関数に直接渡すこともできます。 各フォーマット可能タイプは、フォーマット仕様の解釈方法を定義できます。

ほとんどの組み込み型は、フォーマット仕様に対して次のオプションを実装していますが、一部のフォーマットオプションは数値型でのみサポートされています。

一般的な規則では、空のフォーマット文字列("")は、値に対して str()を呼び出した場合と同じ結果を生成します。 空でないフォーマット文字列は通常、結果を変更します。

標準フォーマット指定子の一般的な形式は次のとおりです。

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
 塗りつぶし        ::=  <any character>
  align       ::=  "<" | ">" | "=" | "^"
 サイン        ::=  "+" | "-" | " "
 幅       ::=  integer
 精度   ::=  integer
 タイプ        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

有効な align 値を指定すると、その前に fill 文字を付けることができます。この文字は任意の文字で、省略した場合はデフォルトでスペースになります。 str.format()を使用する場合、 fill 文字としてリテラル中括弧(「{」または「}」)を使用することはできません。 メソッド。 ただし、ネストされた置換フィールドを使用して中括弧を挿入することは可能です。 この制限は、 format()関数には影響しません。

さまざまな配置オプションの意味は次のとおりです。

オプション 意味
'<' 使用可能なスペース内でフィールドを強制的に左揃えにします(これはほとんどのオブジェクトのデフォルトです)。
'>' 使用可能なスペース内でフィールドを強制的に右揃えにします(これは数値のデフォルトです)。
'=' 記号(ある場合)の後、数字の前にパディングを強制的に配置します。 これは、「+ 000000120」の形式でフィールドを印刷するために使用されます。 この配置オプションは、数値型にのみ有効です。 「0」がフィールド幅の直前にある場合、これがデフォルトになります。
'^' フィールドを強制的に使用可能なスペースの中央に配置します。


最小フィールド幅が定義されていない限り、フィールド幅は常にそれを埋めるためのデータと同じサイズになるため、この場合、配置オプションは意味をなさないことに注意してください。

sign オプションは数値タイプにのみ有効であり、次のいずれかになります。

オプション 意味
'+' 正の数と負の数の両方に符号を使用する必要があることを示します。
'-' 符号は負の数にのみ使用する必要があることを示します(これがデフォルトの動作です)。
スペース 正の数には先頭のスペースを使用し、負の数にはマイナス記号を使用する必要があることを示します。


'#'オプションは整数に対してのみ有効であり、2進数、8進数、または16進数の出力に対してのみ有効です。 存在する場合は、出力の前に'0b''0o'、または'0x'をそれぞれ付けることを指定します。

','オプションは、千単位の区切り文字にコンマを使用することを示します。 ロケール対応の区切り文字の場合は、代わりに'n'整数表示タイプを使用してください。

バージョン2.7で変更: ','オプションが追加されました( PEP 378 も参照)。


width は、最小フィールド幅を定義する10進整数です。 指定しない場合、フィールド幅はコンテンツによって決定されます。

明示的な配置が指定されていない場合、 width フィールドの前にゼロ('0')文字を付けると、数値型の符号対応ゼロパディングが有効になります。 これは、アライメントタイプが'=''0'塗りつぶし文字に相当します。

precision は、'f'および'F'でフォーマットされた浮動小数点値の小数点以下、または小数点の前後に表示する桁数を示す10進数です。 'g'または'G'でフォーマットされた浮動小数点値のポイント。 数値以外のタイプの場合、フィールドは最大フィールドサイズを示します。つまり、フィールドの内容から使用される文字数を示します。 precision は整数値には使用できません。

最後に、 type は、データの表示方法を決定します。

使用可能な文字列表示タイプは次のとおりです。

タイプ 意味
's' 文字列形式。 これは文字列のデフォルトタイプであり、省略できます。
なし 's'と同じです。


使用可能な整数表示タイプは次のとおりです。

タイプ 意味
'b' バイナリ形式。 2を底とする数値を出力します。
'c' キャラクター。 印刷する前に、整数を対応するUnicode文字に変換します。
'd' 10進整数。 基数10の数値を出力します。
'o' 8進数形式。 基数8の数値を出力します。
'x' 16進形式。 9を超える桁には小文字を使用して、基数16の数値を出力します。
'X' 16進形式。 9を超える桁には大文字を使用して、基数16の数値を出力します。
'n' 番号。 これは'd'と同じですが、現在のロケール設定を使用して適切な数字の区切り文字を挿入する点が異なります。
なし 'd'と同じです。


上記の表示タイプに加えて、整数は以下にリストされている浮動小数点表示タイプでフォーマットできます('n'およびNoneを除く)。 その際、 float()を使用して、フォーマットする前に整数を浮動小数点数に変換します。

浮動小数点値と10進値に使用できる表示タイプは次のとおりです。

タイプ 意味
'e' 指数表記。 指数を示すために文字「e」を使用して科学的記数法で数値を出力します。 デフォルトの精度は6です。
'E' 指数表記。 'e'と同じですが、区切り文字として大文字の「E」を使用する点が異なります。
'f' 固定小数点表記。 数値を固定小数点数として表示します。 デフォルトの精度は6です。
'F' 固定小数点表記。 'f'と同じです。
'g'

一般的な形式。 与えられた精度p >= 1の場合、これは数値をp有効数字に丸め、その大きさに応じて固定小数点形式または科学的記数法のいずれかで結果をフォーマットします。

正確なルールは次のとおりです。プレゼンテーションタイプ'e'および精度p-1でフォーマットされた結果は、指数expを持つと仮定します。 次に、-4 <= exp < pの場合、数値は表示タイプ'f'および精度p-1-expでフォーマットされます。 それ以外の場合、数値は表示タイプ'e'および精度p-1でフォーマットされます。 どちらの場合も、重要でない後続ゼロが仮数から削除され、それに続く桁が残っていない場合は小数点も削除されます。

正と負の無限大、正と負のゼロ、およびnansは、inf-inf0-0、およびnanの形式になります。それぞれ、精度に関係なく。

0の精度は、1の精度と同等として扱われます。 デフォルトの精度は6です。

'G' 一般的な形式。 'g'と同じですが、数値が大きくなりすぎると'E'に切り替わります。 無限大とNaNの表現も大文字になっています。
'n' 番号。 これは'g'と同じですが、現在のロケール設定を使用して適切な数字の区切り文字を挿入する点が異なります。
'%' パーセンテージ。 数値に100を掛けて、固定('f')形式で表示し、その後にパーセント記号を付けます。
なし 'g'と同じです。


7.1.3.2。 フォーマット例

このセクションには、 str.format()構文の例と、古い%フォーマットとの比較が含まれています。

ほとんどの場合、構文は古い%形式と似ていますが、{}が追加され、%の代わりに:が使用されます。 たとえば、'%03.2f''{:03.2f}'に変換できます。

新しいフォーマット構文は、次の例に示すように、新しいさまざまなオプションもサポートします。

位置による引数へのアクセス:

>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c')  # 2.7+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc')      # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad')   # arguments' indices can be repeated
'abracadabra'

名前による引数へのアクセス:

>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: 37.24N, -115.81W'

引数の属性へのアクセス:

>>> c = 3-5j
>>> ('The complex number {0} is formed from the real part {0.real} '
...  'and the imaginary part {0.imag}.').format(c)
'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
>>> class Point(object):
...     def __init__(self, x, y):
...         self.x, self.y = x, y
...     def __str__(self):
...         return 'Point({self.x}, {self.y})'.format(self=self)
...
>>> str(Point(4, 2))
'Point(4, 2)'

引数の項目へのアクセス:

>>> coord = (3, 5)
>>> 'X: {0[0]};  Y: {0[1]}'.format(coord)
'X: 3;  Y: 5'

%s%rの交換:

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"

テキストの配置と幅の指定:

>>> '{:<30}'.format('left aligned')
'left aligned                  '
>>> '{:>30}'.format('right aligned')
'                 right aligned'
>>> '{:^30}'.format('centered')
'           centered           '
>>> '{:*^30}'.format('centered')  # use '*' as a fill char
'***********centered***********'

%+f%-f、および% fを置き換えて、符号を指定します。

>>> '{:+f}; {:+f}'.format(3.14, -3.14)  # show it always
'+3.140000; -3.140000'
>>> '{: f}; {: f}'.format(3.14, -3.14)  # show a space for positive numbers
' 3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14)  # show only the minus -- same as '{:f}; {:f}'
'3.140000; -3.140000'

%x%oを置き換え、値を別の基数に変換します。

>>> # format also supports binary numbers
>>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)
'int: 42;  hex: 2a;  oct: 52;  bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)
'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'

カンマを千単位の区切り文字として使用する:

>>> '{:,}'.format(1234567890)
'1,234,567,890'

パーセンテージの表現:

>>> points = 19.5
>>> total = 22
>>> 'Correct answers: {:.2%}'.format(points/total)
'Correct answers: 88.64%'

タイプ固有のフォーマットの使用:

>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'

ネスト引数とより複雑な例:

>>> for align, text in zip('<^>', ['left', 'center', 'right']):
...     '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>
>>> octets = [192, 168, 0, 1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12):
...     for base in 'dXob':
...         print '{0:{width}{base}}'.format(num, base=base, width=width),
...     print
...
    5     5     5   101
    6     6     6   110
    7     7     7   111
    8     8    10  1000
    9     9    11  1001
   10     A    12  1010
   11     B    13  1011

7.1.4。 テンプレート文字列

バージョン2.4の新機能。


テンプレートは、 PEP 292 で説明されているように、より単純な文字列置換を提供します。 テンプレートは、通常の%ベースの置換の代わりに、次のルールを使用して$ベースの置換をサポートします。

  • $$はエスケープです。 単一の$に置き換えられます。
  • $identifierは、"identifier"のマッピングキーに一致する置換プレースホルダーに名前を付けます。 デフォルトでは、"identifier"はPython識別子を綴る必要があります。 $文字の後の最初の非識別子文字は、このプレースホルダー指定を終了します。
  • ${identifier}$identifierと同等です。 "${noun}ification"のように、有効な識別子文字がプレースホルダーの後に続くが、プレースホルダーの一部ではない場合に必要です。

文字列に$が含まれていると、ValueErrorが発生します。

string モジュールは、これらのルールを実装する Template クラスを提供します。 テンプレートのメソッドは次のとおりです。

class string.Template(template)

コンストラクターは、テンプレート文字列である単一の引数を取ります。

substitute(mapping[, **kws])

テンプレートの置換を実行し、新しい文字列を返します。 mapping は、テンプレート内のプレースホルダーと一致するキーを持つ辞書のようなオブジェクトです。 または、キーワードがプレースホルダーであるキーワード引数を指定することもできます。 マッピングkws の両方が指定され、重複がある場合、 kws のプレースホルダーが優先されます。

safe_substitute(mapping[, **kws])

代替()と同様ですが、マッピングおよび kws にプレースホルダーがない場合、KeyError例外を発生させる代わりに、元のプレースホルダーは結果の文字列にそのまま表示されます。 また、 substitute()とは異なり、$の他の外観は、ValueErrorを上げる代わりに、単に$を返します。

他の例外が発生する可能性はありますが、このメソッドは、例外を発生させるのではなく、常に使用可能な文字列を返そうとするため、「安全」と呼ばれます。 別の意味では、 safe_substitute()は、ぶら下がっている区切り文字、一致しない中括弧、または有効なPython識別子ではないプレースホルダーを含む不正な形式のテンプレートを黙って無視するため、安全以外の何かである可能性があります。

Template インスタンスは、次の1つのパブリックデータ属性も提供します。

template

これは、コンストラクターの template 引数に渡されるオブジェクトです。 通常、変更しないでください。ただし、読み取り専用アクセスは強制されません。

テンプレートの使用方法の例を次に示します。

>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
>>> d = dict(who='tim')
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
...
ValueError: Invalid placeholder in string: line 1, col 11
>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
...
KeyError: 'what'
>>> Template('$who likes $what').safe_substitute(d)
'tim likes $what'

高度な使用法: Template のサブクラスを派生させて、プレースホルダー構文、区切り文字、またはテンプレート文字列の解析に使用される正規表現全体をカスタマイズできます。 これを行うには、次のクラス属性をオーバーライドできます。

  • delimiter –これは区切り文字を導入するプレースホルダーを説明するリテラル文字列です。 デフォルト値は$です。 実装は必要に応じてこの文字列で re.escape()を呼び出すため、これは正規表現ではなくである必要があることに注意してください。
  • idpattern –これは、中括弧のないプレースホルダーのパターンを表す正規表現です(中括弧は必要に応じて自動的に追加されます)。 デフォルト値は正規表現[_a-z][_a-z0-9]*です。

または、クラス属性 pattern をオーバーライドして、正規表現パターン全体を提供することもできます。 これを行う場合、値は4つの名前付きキャプチャグループを持つ正規表現オブジェクトである必要があります。 キャプチャグループは、無効なプレースホルダールールとともに、上記のルールに対応しています。

  • escaped –このグループはエスケープシーケンスに一致します。例: $$、デフォルトのパターン。
  • 名前付き –このグループは、括弧で囲まれていないプレースホルダー名と一致します。 キャプチャグループに区切り文字を含めないでください。
  • braced –このグループは、中括弧で囲まれたプレースホルダー名と一致します。 キャプチャグループに区切り文字または中括弧を含めないでください。
  • invalid –このグループは、他の区切り文字パターン(通常は単一の区切り文字)と一致し、正規表現の最後に表示されます。


7.1.5。 文字列関数

次の関数は、文字列およびUnicodeオブジェクトを操作するために使用できます。 文字列メソッドとしては使用できません。

string.capwords(s[, sep])
str.split()を使用して引数を単語に分割し、 str.capitalize()を使用して各単語を大文字にし、 str.join()を使用して大文字の単語を結合します。 ]。 オプションの2番目の引数 sep がないかNoneの場合、空白文字の実行は単一のスペースに置き換えられ、先頭と末尾の空白が削除されます。それ以外の場合は、 sep が使用されます。単語を分割して結合します。
string.maketrans(from, to)

translate()に渡すのに適した変換テーブルを返します。これにより、 from の各文字がからの同じ位置にある文字にマップされます。 fromto の長さは同じである必要があります。

ノート

小文字および大文字から派生した文字列を引数として使用しないでください。 一部のロケールでは、これらの長さが同じではありません。 大文字と小文字の変換には、常に str.lower()str.upper()を使用してください。


7.1.6。 非推奨の文字列関数

次の関数のリストは、文字列およびUnicodeオブジェクトのメソッドとしても定義されています。 これらの詳細については、セクション文字列メソッドを参照してください。 これらの関数は非推奨と見なす必要がありますが、Python3まで削除されません。 このモジュールで定義されている関数は次のとおりです。

string.atof(s)

バージョン2.0以降非推奨: float()組み込み関数を使用します。

文字列を浮動小数点数に変換します。 文字列には、Pythonの浮動小数点リテラルの標準構文が必要であり、オプションで記号(+または-)を前に付ける必要があります。 文字列が渡されると、これは組み込み関数 float()と同じように動作することに注意してください。

ノート

文字列を渡すと、基になるCライブラリによっては、NaNとInfinityの値が返される場合があります。 これらの値が返される原因となる受け入れられた文字列の特定のセットは、Cライブラリに完全に依存し、変化することが知られています。

string.atoi(s[, base])

バージョン2.0以降非推奨: int()組み込み関数を使用します。

文字列 s を指定されたベースの整数に変換します。 文字列は1つ以上の数字で構成されている必要があり、オプションで記号(+または-)が前に付きます。 base のデフォルトは10です。 0の場合、(符号を取り除いた後の)文字列の先頭文字に応じてデフォルトの基数が選択されます。0xまたは0Xは16を意味し、0は8を意味します。それ以外は10を意味します。 base が16の場合、必須ではありませんが、先頭の0xまたは0Xが常に受け入れられます。 これは、文字列が渡されると、組み込み関数 int()と同じように動作します。 (注:数値リテラルをより柔軟に解釈するには、組み込み関数 eval()を使用してください。)

string.atol(s[, base])

バージョン2.0以降非推奨: long()組み込み関数を使用します。

文字列 s を指定されたベースの長整数に変換します。 文字列は1つ以上の数字で構成されている必要があり、オプションで記号(+または-)が前に付きます。 base 引数は、 atoi()と同じ意味です。 末尾のlまたはLは、ベースが0の場合を除いて、許可されていません。 base なしで、または base を10に設定して呼び出された場合、文字列が渡されたとき、これは組み込み関数 long()と同じように動作することに注意してください。

string.capitalize(word)
word のコピーを最初の文字だけを大文字にして返します。
string.expandtabs(s[, tabsize])
現在の列と指定されたタブサイズに応じて、文字列内のタブを1つ以上のスペースに置き換えて展開します。 文字列に改行が入るたびに、列番号がゼロにリセットされます。 これは、他の非印刷文字またはエスケープシーケンスを理解しません。 タブサイズのデフォルトは8です。
string.find(s, sub[, start[, end]])
s の最小のインデックスを返します。ここで、サブストリング sub は、 subs[start:end]に完全に含まれるように検出されます。 失敗した場合は-1を返します。 start および end のデフォルトと負の値の解釈は、スライスの場合と同じです。
string.rfind(s, sub[, start[, end]])
find()と同様ですが、最も高いインデックスを見つけます。
string.index(s, sub[, start[, end]])
find()と同様ですが、部分文字列が見つからない場合はValueErrorを上げます。
string.rindex(s, sub[, start[, end]])
rfind()と同様ですが、部分文字列が見つからない場合はValueErrorを上げます。
string.count(s, sub[, start[, end]])
文字列s[start:end]内の部分文字列 sub の(重複しない)出現回数を返します。 start および end のデフォルトと負の値の解釈は、スライスの場合と同じです。
string.lower(s)
s のコピーを返しますが、大文字は小文字に変換されます。
string.split(s[, sep[, maxsplit]])

文字列 s の単語のリストを返します。 オプションの2番目の引数 sep がないかNoneの場合、単語は空白文字の任意の文字列(スペース、タブ、改行、リターン、フォームフィード)で区切られます。 2番目の引数 sep が存在し、Noneが存在しない場合は、単語の区切り文字として使用する文字列を指定します。 返されるリストには、文字列内の区切り文字の重複しないオカレンスの数よりも1つ多い項目が含まれます。 maxsplit が指定された場合、最大で maxsplit の分割が発生し、文字列の残りの部分がリストの最後の要素として返されます(したがって、リストには最大で[ X192X] 要素)。 maxsplit が指定されていないか-1の場合、分割数に制限はありません(可能なすべての分割が行われます)。

空の文字列での分割の動作は、 sep の値によって異なります。 sep が指定されていない場合、またはNoneとして指定されている場合、結果は空のリストになります。 sep が任意の文字列として指定されている場合、結果は空の文字列である1つの要素を含むリストになります。

string.rsplit(s[, sep[, maxsplit]])

文字列 s の単語のリストを返し、 s を最後からスキャンします。 オプションの3番目の引数 maxsplit が明示的に指定され、ゼロ以外の場合を除いて、すべての意図と目的で、結果の単語リストは split()によって返されるものと同じです。 maxsplit が指定された場合、最大で maxsplit の分割数(右端の分割)が発生し、文字列の残りの部分が最初の要素として返されます。リスト(したがって、リストには最大でmaxsplit+1要素が含まれます)。

バージョン2.4の新機能。

string.splitfields(s[, sep[, maxsplit]])
この関数は、 split()と同じように動作します。 (以前は、 split()は1つの引数でのみ使用されていましたが、 splitfields()は2つの引数でのみ使用されていました。)
string.join(words[, sep])
sep が介在する単語のリストまたはタプルを連結します。 sep のデフォルト値は単一のスペース文字です。 string.join(string.split(s, sep), sep)s と等しいことは常に真実です。
string.joinfields(words[, sep])
この関数は、 join()と同じように動作します。 (以前は、 join()は1つの引数でのみ使用されていましたが、 joinfields()は2つの引数でのみ使用されていました。) joinfields()がないことに注意してください。 文字列オブジェクトのメソッド。 代わりに join()メソッドを使用してください。
string.lstrip(s[, chars])

先頭の文字が削除された文字列のコピーを返します。 chars が省略されているかNoneの場合、空白文字は削除されます。 Noneではなく指定する場合、 chars は文字列である必要があります。 文字列内の文字は、このメソッドが呼び出された文字列の先頭から削除されます。

バージョン2.2.3で変更: chars パラメーターが追加されました。 chars パラメーターは、以前の2.2バージョンでは渡すことができません。

string.rstrip(s[, chars])

末尾の文字が削除された文字列のコピーを返します。 chars が省略されているかNoneの場合、空白文字は削除されます。 Noneではなく指定する場合、 chars は文字列である必要があります。 文字列内の文字は、このメソッドが呼び出された文字列の末尾から削除されます。

バージョン2.2.3で変更: chars パラメーターが追加されました。 chars パラメーターは、以前の2.2バージョンでは渡すことができません。

string.strip(s[, chars])

先頭と末尾の文字が削除された文字列のコピーを返します。 chars が省略されているかNoneの場合、空白文字は削除されます。 Noneではなく指定する場合、 chars は文字列である必要があります。 文字列内の文字は、このメソッドが呼び出された文字列の両端から削除されます。

バージョン2.2.3で変更: chars パラメーターが追加されました。 chars パラメーターは、以前の2.2バージョンでは渡すことができません。

string.swapcase(s)
s のコピーを返しますが、小文字は大文字に変換され、その逆も同様です。
string.translate(s, table[, deletechars])
deletechars (存在する場合)にある s からすべての文字を削除してから、 table を使用して文字を変換します。序数でインデックス付けされた、各文字値の変換。 tableNoneの場合、文字の削除手順のみが実行されます。
string.upper(s)
s のコピーを返しますが、小文字は大文字に変換されます。
string.ljust(s, width[, fillchar])

string.rjust(s, width[, fillchar])
string.center(s, width[, fillchar])

これらの関数はそれぞれ、指定された幅のフィールドで文字列を左揃え、右揃え、および中央揃えにします。 これらは、文字列 s に文字 fillchar (デフォルトはスペース)を指定された幅までパディングすることによって作成された、少なくとも width 文字幅の文字列を返します。右側、左側、または両側。 文字列が切り捨てられることはありません。
string.zfill(s, width)
指定されたに達するまで、左側の数値文字列 s にゼロ桁を埋め込みます。 記号で始まる文字列は正しく処理されます。
string.replace(s, old, new[, maxreplace])
文字列 s のコピーを返し、サブストリング old のすべての出現箇所を new に置き換えます。 オプションの引数 maxreplace を指定すると、最初の maxreplace オカレンスが置き換えられます。