型の種類 文字列

 文字列を定義する

 文字列とは文字を順番に並べたデータです。ダブルクォーテーションで囲んで定義します。順番に並んだ文字には0から始まる番号(インデックス)が振られます。この番号(インデックス)を使って、文字を取り出すことができます。


 >>> a = "abcdefg"
 >>> a[1] ←0から始まるので"b"を示しています。
 'b'


 普通はダブルクォーテーション、ですが文字列中でダブルクォーテーションを使いたいときはシングルクォーテーションも使えます。更に三重クォーテーションを使うと改行も入力できます。
もちろんエスケープシーケンスも使えます。

 >>> a = ' I said " I see."' ←ダブルクォーテーションを文字列中に含める
 >>> a
 ' I said " I see."'

 >>> b = """Thank you
 ... Best Regard"""
 >>> b
 'Thank you\nBest Regard' ←表示では改行はエスケープシーケンス(\n)になる
 >>> print b ←print文を使えば改行されていることがわかります
 Thank you
 Best Regard


 文字列を使った演算

文字列演算
 文字列同士で足し算を行うと、文字列をつなげることができます。また文字列に数値をかけると文字列の繰り返しになります。

 >>> a = "12"
 >>> a + "34"
 '1234'
 >>> a * 4
 '12121212'


文字列と数値の型変換
 文字列と数値の足し算はできません。足し算をするには組み込み関数int()、float()、str()を使って型変換を行います。
 ここでint()、Flloat()は文字列を整数、浮動小数に変換し、Str()は数値を文字列に変換します。

 >>> a = "12"
 >>> a + 34
 Traceback (most recent call last): ←エラーになるとこんな表記になります
  File , Line0, in <stdin>##16
  File , Line0, in Add##17
 TypeError: cannot concatenate 'str' and 'int' objects
 >>> int(a) + 34
 46
 >>> float(a) + 34
 46.0
 >>> a + str(34)
 '1234'


 同じように文字列を扱う組み込み関数にlen()があります。文字列の長さに変換します。
注:関数の意味を考えると"長さを返します。"の方が正しい表現です。

 >>> a = "123456"
 >>> len(a)
 6


 文字列メゾットを使う

 文字列メゾットを活用するってオブジェクト指向言語らしい発想です。オブジェクト指向と聞くと難しいことに聞こえますが、そんな難しいことではありません。

例えば、パソコンでExcelファイルを開こうとする時どうしますか。
 フォルダを開いて目的のファイルを探してクリックして開きますか?それともExcelを立ち上げてから、メニューより『開く』を選んで、目的のファイルを開きますか?

 前者の方法がオブジェクト指向です。つまり開くという動作を決めてから目的の物(オブジェクト)を決めるのではなく、オブジェクトが決まってしまえば、動作は自ずとオブジェクトで決まってしまうという発想です。 現に前者の場合、目的のExcelファイルを選んだだけで、Excelを立ち上げたり、開くという動作の指定はやっていないはずです。
 このようにオブジェクト→動作のように考える発想をオブジェクト指向といいます。

 ということで、文字列の持っているメゾットを解説していきます。

 S.find(検索したい文字列 [,開始インデックス [, 終了インデックス]])
 [ ]で囲ったところは省略可能です。
 文字列Sの先頭から検索を行い、検索したい文字列を探します。最初に見つかった位置のインデックスを返します。見つからなかった場合は「-1」を返します。オプションの引数を与えて、検索する範囲を指定することもできます。find()は文字列の先頭から検索を行いますが、rfind()というメゾットを使うと文字列の末尾(右)から検索します。

 >>> a = "abcde"
 >>> a.find(c) ←cだけでは変数名です。見つからず-1が返されます
 -1
 >>> a.find("c")
 2
 >>> a.rfind("d")
 3


 S.index(検索したい文字列 [,開始インデックス [, 終了インデックス]])
 [ ]で囲ったところは省略可能です。
 find()と同じように動作します。検索したい文字列が見つからなかった場合はValueErrorという例外を発生します。rfind()に相当するrindex()というメゾットもあります。

 >>> a = "abcde"
 >>> a.index("s")
 Traceback (most recent call last):
  File , Line0, in <stdin>##27
  File , Line0, in Index##28
 ValueError: substring s not found in abcde


 S.endswith(検索したい文字列 [,開始インデックス [, 終了インデックス]])
 [ ]で囲ったところは省略可能です。
 文字列Sが検索したい文字列で終わっている時にTrue(真)を返します。そうでない場合はFalse(偽)を返します。

 S.startswith(検索したい文字列 [,開始インデックス [, 終了インデックス]])
 [ ]で囲ったところは省略可能です。
 文字列Sが検索したい文字列で始まっている時にTrue(真)を返します。そうでない場合はFalse(偽)を返します。

 S.replace(検索したい文字列, 置換後の文字列[,最大繰返し数])
 [ ]で囲ったところは省略可能です。
 文字列Sを先頭から検索を行い、検索したい文字列を探します。検索したい文字列が見つかると置換後の文字列に置き換えます。この作業を最大繰返し数だけ行います。最大繰返し数を省略すると、文字列Sの最後まで検索を行います。検索/置換が終わると置換した文字列を返します。元の文字列Sは変更されません。

 >>> a = "12345"
 >>> a.replace("2","two")
 '1two345'
 >>> a ←replace()メゾットは元の文字列は変更しません。
 '12345'
 >>> b = a.replace("2","two") ←別変数で定義すれば、
 >>> b              置換した文字列は保持されす
 '1two345'


 S.split([区切り文字列[, 分割数]])
 [ ]で囲ったところは省略可能です。
 文字列Sを、区切り文字列で区切り、文字列リストを作って返します。リストの文字列からは区切り文字列は除去されます。区切り文字列を省略すると空白スペースで区切られます。分割数を指定すると、分割を行う数を制限できます。rsplit()メゾットを使うと、末尾からの分割数を指定することができます。

 >>> a = "abc def ghi"
 >>> a.split() ←区切り文字列が指定されないので空白スペースで区切る
 ['abc', 'def', 'ghi']
 >>> a.rsplit(" ",1)
 ['abc def', 'ghi']


 S.join(連結するシーケンス)
 シーケンス中の要素を文字列Sを使って連結します。連結した文字列を返します。

 >>> a = "abc"
 >>> a.join("1234567")
 '1abc2abc3abc4abc5abc6abc7' ←それぞれの文字間にabcが入る


 S.strip([削除する文字列])
 [ ]で囲ったところは省略可能です。
 文字列の先頭、および末尾から文字列を削除します。引数を指定しないと、スペースやタブなどを含む空白文字を削除します。引数を指定すると、削除する文字列を対象に削除します。lstrip()メゾットは文字列の先頭のみを対象に処理を行い、rstrip()メゾットは文字列の末尾のみを対象に処理を行います。

 >>> a = "    a b c"
 >>> a.strip()
 'a b c'
 >>> b = "abcdefgh"
 >>> b.strip("ab")
 'cdefgh'
 >>> "aaaaaaa".strip("a")
 '' ←対象文字列はすべて削除される


 S.ljust(幅[,埋める文字列])
 [ ]で囲ったところは省略可能です。
 文字列の幅を指定して「左寄せ」にします。文字列の長さが幅に満たさない場合はスペースを埋めます。引数を指定することで、幅を合わせる時に埋める文字列を指定できます。文字列を表示する際、幅を合わせるために利用できます。
 同様に、rjust()メゾットは「右寄せ」を行い、center()メゾットは「中央寄せ」を行います。

 >>> a = "abcdefgh"
 >>> a.ljust(20)
 'abcdefgh      '
 >>> a.rjust(20)
 '      abcdefgh'
 >>> a.center(20)
 '   abcdefgh   '
 >>> a.ljust(2)
 'abcdefgh' ←"幅"が小さいときはそのまま


 S.upper() / S.lower()
 upper()メゾットは英字小文字を大文字に変換します。lower()メゾットは英字大文字を小文字に変換します。

>>> "abc".upper()
'ABC'
>>> "AbCdE".lower()
'abcde'