Python 文字列

文字列は Python で最もよく使われるデータ型です。引用符 (' 或 ") で文字列を作成します。

文字列の作成は簡単で、変数に値を代入するだけです。例:

var1 = 'Hello World!'
var2 = "Python サンプル"

Python 文字列内の値へのアクセス

Python は単一文字型をサポートしていません。単一文字も Python では文字列として使用されます。

Python で部分文字列にアクセスするには、角括弧を使用して文字列を切り出すことができます。次の例のとおりです:

例(Python 2.0+)

#!/usr/bin/python var1 = 'Hello World!' var2 = "Python サンプル" print "var1[0]: ", var1[0] print "var2[1:5]: ", var2[1:5]

上記の例の実行結果:

var1[0]:  H
var2[1:5]:  ytho

Python 文字列の連結

文字列を切り出して他の文字列と連結することができます。次の例のとおりです:

例(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- var1 = 'Hello World!' print "出力 :-", var1[:6] + 'サンプル!'

上記の例の実行結果

输出 :-  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/Rraw文字列 - raw文字列:すべての文字列はリテラルの意味で直接使用され、特殊文字や印刷できない文字はエスケープされません。 raw文字列は、文字列の最初の引用符の前に文字 "r"(大文字小文字どちらでも可)を付ける以外は、通常の文字列とほぼ完全に同じ構文です。
>>>print r'\n' \n >>> print R'\n' \n
%フォーマット文字列次の章を参照してください

例(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- a = "Hello" b = "Python" print "a + b の出力結果:", a + b print "a * 2 の出力結果:", a * 2 print "a", a[1] print "a[1:4] の出力結果:", a[1:4] if( "H" in a) : print "H は変数 a に含まれています" else : print "H は変数 a に含まれていません" if( "M" not in a) : print "M は変数 a に含まれていません" else : print "M は変数 a に含まれています" print r'\n' print R'\n'

上記のプログラムの実行結果は次のとおりです:

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 の省略形
      %p16進数で変数のアドレスをフォーマット

フォーマット演算子の補助ディレクティブ:

記号機能
*幅または小数点精度を定義
-左揃えに使用
+正数の前にプラス記号 ( + ) を表示
<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 専用のものもあります。

メソッド 説明

string.capitalize()

文字列の最初の文字を大文字にする

string.center(width)

元の文字列を中央に配置し、長さ width になるまでスペースで埋めた新しい文字列を返す

string.count(str, beg=0, end=len(string))

string 内で str が出現する回数を返します。beg または end が指定された場合は、指定された範囲内で str が出現する回数を返します。

string.decode(encoding='UTF-8', errors='strict')

encoding で指定されたエンコーディング形式で string をデコードします。エラーが発生した場合、デフォルトでは ValueError 例外が発生します。ただし、errors に 'ignore' または 'replace' が指定されている場合は除きます。

string.encode(encoding='UTF-8', errors='strict')

encoding で指定されたエンコーディング形式で string をエンコードします。エラーが発生した場合、デフォルトでは ValueError 例外が発生します。ただし、errors に 'ignore' または 'replace' が指定されている場合は除きます。

string.endswith(obj, beg=0, end=len(string))

文字列が obj で終わっているかどうかを確認します。beg または end が指定された場合は、指定された範囲内で obj で終わっているかどうかを確認します。そうであれば True を返し、そうでなければ False を返します。

string.expandtabs(tabsize=8)

文字列 string 内のタブ記号をスペースに変換します。タブ記号のデフォルトのスペース数は 8 です。

string.find(str, beg=0, end=len(string))

str が string に含まれるかどうかを検出し、beg と end で範囲を指定した場合は、その指定範囲内に含まれるかどうかをチェックします。含まれていれば開始インデックス値を返し、それ以外の場合は -1 を返します。

string.format()

文字列をフォーマットする

string.index(str, beg=0, end=len(string))

find() メソッドと同じですが、str が string に含まれない場合は例外を発生させます。

string.isalnum()

string が少なくとも 1 文字あり、すべての文字が英数字であれば True を

返し、そうでなければ False を返します。

string.isalpha()

string が少なくとも 1 文字あり、すべての文字が英字であれば True を返し、

そうでなければ False を返します。

string.isdecimal()

string が十進数字のみを含む場合は True を返し、そうでなければ False を返します。

string.isdigit()

string が数字のみを含む場合は True を返し、そうでなければ False を返します。

string.islower()

string に大文字小文字を区別する文字が少なくとも 1 つ含まれ、それらすべての(大文字小文字を区別する)文字が小文字であれば True を返し、そうでなければ False を返します。

string.isnumeric()

string が数字文字のみを含む場合は True を返し、そうでなければ False を返します。

string.isspace()

string が空白のみを含む場合は True を返し、そうでなければ False を返します。

string.istitle()

string がタイトルケース化されていれば( title() を参照) True を返し、そうでなければ False を返します。

string.isupper()

string に大文字小文字を区別する文字が少なくとも 1 つ含まれ、それらすべての(大文字小文字を区別する)文字が大文字であれば True を返し、そうでなければ False を返します。

string.join(seq)

string を区切り文字として、seq 内のすべての要素(の文字列表現)を連結して 1 つの新しい文字列にします。

string.ljust(width)

元の文字列を左詰めし、長さ width になるまでスペースで埋めた新しい文字列を返します。

string.lower()

string 内のすべての大文字を小文字に変換します。

string.lstrip()

string の左側のスペースを除去します。

string.maketrans(intab, outtab)

maketrans() メソッドは、文字マッピングの変換テーブルを作成するために使用します。2 つの引数を受け取る最も簡単な呼び出し方では、最初の引数は変換する文字を表す文字列で、2 番目の引数は変換先を表す文字列です。

max(str)

文字列の中で最大の文字をstr返します。

min(str)

文字列の中で最小の文字をstr返します。

string.partition(str)

find() と split() を組み合わせたようなものです。str が最初に現れる位置から、文字列 string を 3 要素のタプル (string_pre_str, str, string_post_str) に分割します。string に str が含まれない場合は、string_pre_str == string となります。

string.replace(str1, str2,  num=string.count(str1))

string 内の str1 を str2 に置換します。num が指定されている場合は、num 回を超えて置換しません。

string.rfind(str, beg=0,end=len(string) )

find() 関数と似ていますが、文字列が最後に現れる位置を返し、一致するものがない場合は -1 を返します。

string.rindex( str, beg=0,end=len(string))

index() と似ていますが、最後に一致したサブ文字列のインデックス番号を返します。

string.rjust(width)

元の文字列を右詰めし、長さ width になるまでスペースで埋めた新しい文字列を返します。

string.rpartition(str)

partition() 関数に似ていますが、右側から検索します。

string.rstrip()

string の末尾のスペースを削除します。

string.split(str="", num=string.count(str))

str を区切り文字として string を分割します。num が指定されている場合は、num+1num 個の部分文字列だけに分割します。

string.splitlines([keepends])

行('\r', '\r\n', '\n') で区切り、各行を要素として含むリストを返します。引数 keepends が False の場合は改行文字を含めず、True の場合は改行文字を保持します。

string.startswith(obj, beg=0,end=len(string))

文字列が obj で始まるかどうかを調べ、そうであれば True を返し、そうでなければ False を返します。beg と end に値を指定した場合は、指定された範囲内で調べます。

string.strip([obj])

string に対して lstrip() と rstrip() を実行します。

string.swapcase()

string 内の大文字と小文字を反転します。

string.title()

「タイトルケース」の string を返します。つまり、すべての単語が大文字で始まり、残りの文字はすべて小文字です( istitle() を参照)。

string.translate(str, del="")

str が与えるテーブル(256 文字を含む)に基づいて string の文字を変換します。

削除する文字は del パラメータに指定します。

string.upper()

string 内の小文字を大文字に変換します。

string.zfill(width)

長さ width の文字列を返します。元の文字列 string を右詰めし、先頭を 0 で埋めます。

その他の拡張