Python 文字列
文字列は Python で最もよく使われるデータ型です。引用符 (' 或 ") で文字列を作成します。
文字列の作成は簡単で、変数に値を代入するだけです。例:
var1 = 'Hello World!' var2 = "Python サンプル"
Python 文字列内の値へのアクセス
Python は単一文字型をサポートしていません。単一文字も Python では文字列として使用されます。
Python で部分文字列にアクセスするには、角括弧を使用して文字列を切り出すことができます。次の例のとおりです:
例(Python 2.0+)
上記の例の実行結果:
var1[0]: H var2[1:5]: ytho
Python 文字列の連結
文字列を切り出して他の文字列と連結することができます。次の例のとおりです:
例(Python 2.0+)
上記の例の実行結果
输出 :- Hello サンプル!
Python エスケープ文字
文字に特殊文字を使用する必要がある場合、Python ではバックスラッシュを使用します\エスケープ文字。次の表のとおりです:
| エスケープ文字 | 説明 |
|---|---|
| \(行末の場合) | 継続行記号 |
| \\ | バックスラッシュ記号 |
| \' | シングルクォート |
| \" | ダブルクォート |
| \a | ベル |
| \b | バックスペース(Backspace) |
| \e | エスケープ |
| \000 | 空 |
| \n | 改行 |
| \v | 垂直タブ |
| \t | 水平タブ |
| \r | キャリッジリターン |
| \f | フォームフィード |
| \oyy | 8進数。y は 0~7 の文字を表します。例:\012 は改行を表します。 |
| \xyy | 16進数。\x で始まり、yy は文字を表します。例:\x0a は改行を表します。 |
| \other | その他の文字は通常の形式で出力されます。 |
Python 文字列演算子
次の表の例では、変数 a の値は文字列 "Hello"、変数 b の値は "Python" です:
| 演算子 | 説明 | 例 |
|---|---|---|
| + | 文字列連結 |
>>>a + b
'HelloPython'
|
| * | 文字列を繰り返し出力 |
>>>a * 2
'HelloHello'
|
| [] | インデックスによる文字列内の文字の取得 |
>>>a[1]
'e'
|
| [ : ] | 文字列の一部を切り出す |
>>>a[1:4]
'ell'
|
| in | メンバー演算子 - 文字列が指定された文字を含む場合 True を返す |
>>>"H" in a
True
|
| not in | メンバー演算子 - 文字列が指定された文字を含まない場合 True を返す |
>>>"M" not in a
True
|
| r/R | raw文字列 - raw文字列:すべての文字列はリテラルの意味で直接使用され、特殊文字や印刷できない文字はエスケープされません。 raw文字列は、文字列の最初の引用符の前に文字 "r"(大文字小文字どちらでも可)を付ける以外は、通常の文字列とほぼ完全に同じ構文です。 | >>>print r'\n'
\n
>>> print R'\n'
\n |
| % | フォーマット文字列 | 次の章を参照してください |
例(Python 2.0+)
上記のプログラムの実行結果は次のとおりです:
a + b 输出结果: HelloPython a * 2 输出结果: HelloHello a[1] 输出结果: e a[1:4] 输出结果: ell H 在变量 a 中 M 不在变量 a 中 \n \n
Python 文字列フォーマット
Python はフォーマット文字列の出力をサポートしています。非常に複雑な式を使用する場合もありますが、最も基本的な使い方は、文字列フォーマット指定子 %s を含む文字列に値を挿入することです。
Python では、文字列フォーマットは C の sprintf 関数と同じ構文を使用します。
次の例のとおりです:
#!/usr/bin/python
print "My name is %s and weight is %d kg!" % ('Zara', 21)
上記の例の出力結果:
My name is Zara and weight is 21 kg!
Python 文字列フォーマット指定子:
| 記号 | 説明 |
|---|---|
| %c | 文字とそのASCIIコードをフォーマット |
| %s | 文字列をフォーマット |
| %d | 整数をフォーマット |
| %u | 符号なし整数をフォーマット |
| %o | 符号なし8進数をフォーマット |
| %x | 符号なし16進数をフォーマット |
| %X | 符号なし16進数(大文字)をフォーマット |
| %f | 浮動小数点数をフォーマットし、小数点以下の精度を指定可能 |
| %e | 科学表記法で浮動小数点数をフォーマット |
| %E | %e と同じ作用で、科学表記法で浮動小数点数をフォーマット |
| %g | %f と %e の省略形 |
| %G | %F と %E の省略形 |
| %p | 16進数で変数のアドレスをフォーマット |
フォーマット演算子の補助ディレクティブ:
| 記号 | 機能 |
|---|---|
| * | 幅または小数点精度を定義 |
| - | 左揃えに使用 |
| + | 正数の前にプラス記号 ( + ) を表示 |
| <sp> | 正数の前にスペースを表示 |
| # | 8進数の前にゼロ ('0') を表示し、16進数の前に '0x' または '0X' を表示( 'x' か 'X' かによって異なります) |
| 0 | 表示する数字の前に、デフォルトのスペースではなく '0' を埋める |
| % | '%%' は単一の '%' を出力 |
| (var) | 変数のマッピング(辞書引数) |
| m.n. | m は表示する最小の全体幅、n は小数点以下の桁数(利用可能な場合) |
Python 2.6 から、文字列をフォーマットする新しい関数が追加されましたstr.format()これは文字列フォーマット機能を強化します。
Python トリプルクォート
Python では、トリプルクォートを使用して複雑な文字列を代入できます。
Python のトリプルクォートは、文字列を複数行にまたがらせることができ、文字列内に改行、タブ、その他の特殊文字を含めることができます。
トリプルクォートの構文は、連続するシングルクォートまたはダブルクォートの組です(通常は対で使用します)。
>>> hi = '''hi there''' >>> hi # repr() 'hi\nthere' >>> print hi # str() hi there
トリプルクォートにより、プログラマは引用符や特殊文字列の煩わしさから解放され、文字列の一部を最初から最後までいわゆるWYSIWYG(見たまま)形式で保持できます。
典型的な使用例としては、HTML や SQL のブロックが必要な場合です。このようなとき、トリプルクォートでマークすれば、従来のエスケープ文字体系を使用するのは非常に手間がかかります。
errHTML = '''
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
'''
cursor.execute('''
CREATE TABLE users (
login VARCHAR(8),
uid INTEGER,
prid INTEGER)
''')
Unicode 文字列
Python で Unicode 文字列を定義するのは、通常の文字列を定義するのと同じくらい簡単です:
>>> u'Hello World !' u'Hello World !'
引用符の前の小文字の "u" は、ここで作成されるのが Unicode 文字列であることを示します。特殊文字を追加したい場合は、Python の Unicode-Escape エンコーディングを使用できます。次の例のとおりです:
>>> u'Hello\u0020World !' u'Hello World !'
置き換えられた \u0020 という表記は、指定された位置にエンコード値 0x0020 の Unicode 文字(スペース)を挿入することを示します。
Python の文字列組み込み関数
文字列メソッドは Python 1.6 から 2.0 にかけて徐々に追加されました —— それらは Jython にも追加されました。
これらのメソッドは string モジュールのほとんどのメソッドを実装しています。次の表は、現在文字列に組み込みでサポートされているメソッドを示しています。すべてのメソッドは Unicode をサポートしており、中には Unicode 専用のものもあります。
| メソッド | 説明 |
|---|---|
|
文字列の最初の文字を大文字にする |
|
|
元の文字列を中央に配置し、長さ width になるまでスペースで埋めた新しい文字列を返す |
|
|
string 内で str が出現する回数を返します。beg または end が指定された場合は、指定された範囲内で str が出現する回数を返します。 |
|
|
encoding で指定されたエンコーディング形式で string をデコードします。エラーが発生した場合、デフォルトでは ValueError 例外が発生します。ただし、errors に 'ignore' または 'replace' が指定されている場合は除きます。 |
|
|
encoding で指定されたエンコーディング形式で string をエンコードします。エラーが発生した場合、デフォルトでは ValueError 例外が発生します。ただし、errors に 'ignore' または 'replace' が指定されている場合は除きます。 |
|
|
文字列が obj で終わっているかどうかを確認します。beg または end が指定された場合は、指定された範囲内で obj で終わっているかどうかを確認します。そうであれば True を返し、そうでなければ False を返します。 |
|
|
文字列 string 内のタブ記号をスペースに変換します。タブ記号のデフォルトのスペース数は 8 です。 |
|
|
str が string に含まれるかどうかを検出し、beg と end で範囲を指定した場合は、その指定範囲内に含まれるかどうかをチェックします。含まれていれば開始インデックス値を返し、それ以外の場合は -1 を返します。 |
|
|
文字列をフォーマットする |
|
|
find() メソッドと同じですが、str が string に含まれない場合は例外を発生させます。 |
|
|
string が少なくとも 1 文字あり、すべての文字が英数字であれば True を 返し、そうでなければ False を返します。 |
|
|
string が少なくとも 1 文字あり、すべての文字が英字であれば True を返し、 そうでなければ False を返します。 |
|
|
string が十進数字のみを含む場合は True を返し、そうでなければ False を返します。 |
|
|
string が数字のみを含む場合は True を返し、そうでなければ False を返します。 |
|
|
string に大文字小文字を区別する文字が少なくとも 1 つ含まれ、それらすべての(大文字小文字を区別する)文字が小文字であれば True を返し、そうでなければ False を返します。 |
|
|
string が数字文字のみを含む場合は True を返し、そうでなければ False を返します。 |
|
|
string が空白のみを含む場合は True を返し、そうでなければ False を返します。 |
|
|
string がタイトルケース化されていれば( title() を参照) True を返し、そうでなければ False を返します。 |
|
|
string に大文字小文字を区別する文字が少なくとも 1 つ含まれ、それらすべての(大文字小文字を区別する)文字が大文字であれば True を返し、そうでなければ False を返します。 |
|
|
string を区切り文字として、seq 内のすべての要素(の文字列表現)を連結して 1 つの新しい文字列にします。 |
|
|
元の文字列を左詰めし、長さ width になるまでスペースで埋めた新しい文字列を返します。 |
|
|
string 内のすべての大文字を小文字に変換します。 |
|
|
string の左側のスペースを除去します。 |
|
|
maketrans() メソッドは、文字マッピングの変換テーブルを作成するために使用します。2 つの引数を受け取る最も簡単な呼び出し方では、最初の引数は変換する文字を表す文字列で、2 番目の引数は変換先を表す文字列です。 |
|
|
文字列の中で最大の文字をstr返します。 |
|
|
文字列の中で最小の文字をstr返します。 |
|
|
find() と split() を組み合わせたようなものです。str が最初に現れる位置から、文字列 string を 3 要素のタプル (string_pre_str, str, string_post_str) に分割します。string に str が含まれない場合は、string_pre_str == string となります。 |
|
|
string 内の str1 を str2 に置換します。num が指定されている場合は、num 回を超えて置換しません。 |
|
|
find() 関数と似ていますが、文字列が最後に現れる位置を返し、一致するものがない場合は -1 を返します。 |
|
|
index() と似ていますが、最後に一致したサブ文字列のインデックス番号を返します。 |
|
|
元の文字列を右詰めし、長さ width になるまでスペースで埋めた新しい文字列を返します。 |
|
|
partition() 関数に似ていますが、右側から検索します。 |
|
|
string の末尾のスペースを削除します。 |
|
|
str を区切り文字として string を分割します。num が指定されている場合は、num+1num 個の部分文字列だけに分割します。 |
|
|
行('\r', '\r\n', '\n') で区切り、各行を要素として含むリストを返します。引数 keepends が False の場合は改行文字を含めず、True の場合は改行文字を保持します。 |
|
|
文字列が obj で始まるかどうかを調べ、そうであれば True を返し、そうでなければ False を返します。beg と end に値を指定した場合は、指定された範囲内で調べます。 |
|
|
string に対して lstrip() と rstrip() を実行します。 |
|
|
string 内の大文字と小文字を反転します。 |
|
|
「タイトルケース」の string を返します。つまり、すべての単語が大文字で始まり、残りの文字はすべて小文字です( istitle() を参照)。 |
|
|
str が与えるテーブル(256 文字を含む)に基づいて string の文字を変換します。 削除する文字は del パラメータに指定します。 |
|
|
string 内の小文字を大文字に変換します。 |
|
|
長さ width の文字列を返します。元の文字列 string を右詰めし、先頭を 0 で埋めます。 |