⑩Pythonの文字列

スポンサーリンク

本当にわからないとこがあった場合一人では解決できません。
『teratail』とはエンジニア特化型のQ&Aサイトです。 すべてのエンジニアさんが抱えている悩みを共有して 解決するための質問サイトです
無料なのでまずは登録して使ってみてください。メールアドレスだけで登録可能です ----------------------------------------------------------------------------------------

Pythonの文字列

文字列は文字を引用符で囲むだけで簡単に作成できます。Pythonは一重引用符を二重引用符と同じように扱います。文字列を作成するのは、変数に値を代入するのと同じくらい簡単です。たとえば –

var1 = 'Hello World!'
var2 = "Python Programming"

文字列の値へのアクセス

Pythonは文字型をサポートしていません。これらは長さ1の文字列として扱われるため、部分文字列と見なされます。

部分文字列にアクセスするには、部分文字列を取得するために、角かっこをスライスして索引とともに使用します。たとえば –

#!/usr/bin/python

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

上記のコードを実行すると、次の結果が生成されます。

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

文字列の更新




変数を別の文字列に割り当てることによって、既存の文字列を「更新」することができます。新しい値は、以前の値またはまったく異なる文字列に関連付けることができます。たとえば –

#!/usr/bin/python

var1 = 'Hello World!'

print "Updated String :- ", var1[:6] + 'Python'

上記のコードを実行すると、次の結果が生成されます。

Updated String :-  Hello Python

エスケープ文字

以下の表は、バックスラッシュ表記で表すことができるエスケープ文字または印刷不能文字のリストです。

 

バックスラッシュ
表記
16進
文字
説明
\ a 0x07 ベルまたはアラート
\ b 0x08 バックスペース
\ cx Control-x
\ Cx Control-x
\ e 0x1b エスケープ
\ f 0x0c Formfeed
\ M- \ Cx Meta-Control-x
\ n 0x0a 改行
\ nnn nが0.7の範囲にある8進表記法
\ r 0x0d キャリッジリターン
\ s 0x20 スペース
\ t 0x09 タブ
\ v 0x0b 垂直タブ
キャラクターx
\ xnn nが0.9、af、またはAFの範囲にある16進表記

文字列特殊演算子

文字列変数aが ‘Hello’、変数bが ‘Python’の場合です

説明
+ 連結 – 演算子の両側に値を追加します。 a + bはHelloPython
* 反復 – 新しい文字列を作成し、同じ文字列の複数のコピーを連結する a * 2は-HelloHello
[] Slice – 指定されたインデックスから文字を取得します。 a [1]はe
[:] Range Slice – 指定された範囲から文字を取得します。 a [1:4]はell

文字列フォーマット演算子

Pythonの最もクールな機能の1つは、文字列形式の演算子%です。この演算子は文字列に固有で、Cのprintf()ファミリの関数を持つパックを補完します。以下は簡単な例です –

#!/usr/bin/python

print "My name is %s and weight is %d kg!" % ('Zara', 21) 

上記のコードを実行すると、次の結果が生成されます。

My name is Zara and weight is 21 kg!

ここでは% – と一緒に使用できるシンボルの完全なセットのリストを示します。

フォーマットシンボル 変換
%c キャラクター
%s 書式設定の前にstr()を使って文字列を変換する
%i 符号付き10進整数
%d 符号付き10進整数
%u 符号なし10進整数
%o 8進整数
%× 16進整数(小文字)
%× 16進整数(大文字)
%e 指数表記(小文字の「e」)
%E 指数表記法(大文字の「E」付き)
%f 浮動小数点実数
%g %fと%eのうち短いもの
%G %fと%Eのうち短いもの

その他のサポートされているシンボルと機能は、次の表にリストされています。

シンボル 機能性
* 引数は幅または精度を指定します。
左寄せ
+ 記号を表示する
<sp> 正の数の前に空白を残す
‘x’と ‘X’のどちらが使用されたかに応じて、8進数の先頭ゼロ( ‘0’)または16進数の先頭に ‘0x’または ‘0X’を追加します。
0 左から空白の代わりにゼロを埋め込む
‘%%’はあなたに1つのリテラル ‘%’
(var) マッピング変数(辞書引数)
m.n. mは最小合計幅、nは小数点の後に表示する桁数です(applの場合)。

トリプルクォート




Pythonのトリプルクォートは、慣習的なNEWLINE、TAB、およびその他の特殊文字を含め、文字列が複数の行にまたがるようにすることで救済されています。

三重引用符の構文は、3つの連続した一重引用符または二重引用符で構成されます。

#!/usr/bin/python

para_str = """あいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあい
"""
print para_str

上記のコードを実行すると、以下の結果が得られます。1つの特殊文字がどのように印刷されたフォームに変換されたかに注意してください。最後のNEWLINEまでの文字列の最後の「up」との間にあります。三重引用符を閉じます。NEWLINEは、行末の明示的な改行またはエスケープコード(\ n)のいずれかで発生することにも注意してください。

あいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあいあいうえおうえおあい.

Raw stringsはバックスラッシュを特別な文字として扱いません。

あなたがRaw stringsに入れたすべての文字は、あなたがそれを書いた方法にとどまります。

#!/usr/bin/python

print 'C:\\nowhere'

上記のコードを実行すると、次の結果が生成されます。

C:\nowhere

さて、Raw stringsを利用してみましょう。次のように表現をr’expression ‘に置きます。

#!/usr/bin/python

print r'C:\\nowhere'

上記のコードを実行すると、次の結果が生成されます。

C:\\nowhere

Unicode文字列

Pythonの標準文字列は内部的に8ビットASCIIとして格納され、Unicode文字列は16ビットUnicodeとして格納されます。これにより、世界のほとんどの言語の特殊文字を含む、より多様な文字セットが可能になります。私はUnicode文字列の扱いを次のように制限します –

#!/usr/bin/python

print u'Hello, world!'

上記のコードを実行すると、次の結果が生成されます。

Hello, world!

ご覧のように、Unicode文字列は接頭辞rを使用する生の文字列と同じように接頭辞uを使用します。

組み込みの文字列メソッド

Pythonには、文字列を操作する次の組み込みメソッドが含まれています。

SN 説明付きのメソッド
1 capitalize()
文字列の最初の文字を大文字にする

#!/usr/bin/python

str = "this is サンプル!!!";

print "str.capitalize() : ", str.capitalize()

結果としてこうなります

str.capitalize() :  This is サンプル!!!"
2 center(width、fillchar)

元の文字列を合計幅の列の中央に合わせて、スペースが埋め込まれた文字列を返します。

#!/usr/bin/python

str = "this is string example....wow!!!";

print "str.center(40, 'a') : ", str.center(40, 'a')

結果としてこうなります

str.center(40, 'a') :  aaaathis is string example....wow!!!aaaa
3 count(str、beg = 0、end = len(string))

開始インデックスbegと終了インデックス終了が与えられた場合に、文字列内または文字列の部分文字列内でstrが何回起こるかを数えます。

#!/usr/bin/python

str = "this is string example....wow!!!";

sub = "i";
print "str.count(sub, 4, 40) : ", str.count(sub, 4, 40)
sub = "wow";
print "str.count(sub) : ", str.count(sub)

結果としてこうなります

str.count(sub, 4, 40) :  2
str.count(sub) :  1
4 decode(encoding=’UTF-8′,errors=’strict’)

エンコード用に登録されたコーデックを使用して文字列をデコードします。デフォルトの文字列エンコーディングになります。

#!/usr/bin/python

Str = "this is string example";
Str = Str.encode('base64','strict');

print "Encoded String: " + Str
print "Decoded String: " + Str.decode('base64','strict')

結果

Encoded String: dGhpcyBpcyBzdHJpbmcgZXhhbXBsZS4uLi53b3chISE=

Decoded String: this is string example
5 encode(encoding=’UTF-8′,errors=’strict’)

文字列のエンコードされた文字列バージョンを返します。エラーの場合、デフォルトでは、 ‘ignore’または ‘replace’でエラーが指定されていない限り、ValueErrorを発生させます。

#!/usr/bin/python

str = "this is string example....wow!!!";

print "Encoded String: " + str.encode('base64','strict')

結果

Encoded String: dGhpcyBpcyBzdHJpbmcgZXhhbXBsZS4uLi53b3chISE=
6 endswith(suffix、beg = 0、end = len(string))
文字列または文字列の部分文字列(開始インデックスbegと終了インデックスendが与えられている場合)が接尾辞で終わるかどうかを判定します。あれば真を返し、そうでなければ偽を返します。

#!/usr/bin/python

str = "this is string example....wow!!!";

suffix = "wow!!!";
print str.endswith(suffix)
print str.endswith(suffix,20)

suffix = "is";
print str.endswith(suffix, 2, 4)
print str.endswith(suffix, 2, 6)

結果

True
True
True
False
7 expandtabs(tabsize = 8)

文字列内のタブを複数のスペースに展開します。タブのサイズが指定されていない場合は、タブごとにデフォルトで8スペースになります。

#!/usr/bin/python

str = "this is\tstring example....wow!!!";


print "Original string: " + str
print "Defualt exapanded tab: " +  str.expandtabs()
print "Double exapanded tab: " +  str.expandtabs(16)

結果

Original string: this is        string example....wow!!!
Defualt exapanded tab: this is string example....wow!!!
Double exapanded tab: this is         string example....wow!!!
8 find(str、beg = 0 end = len(string))

インデックスbegが開始され、インデックスendが終了するとstrが文字列内または文字列の部分文字列内にあるかどうかを判定します。見つかった場合はインデックスを返し、そうでない場合は-1を返します。

#!/usr/bin/python

str1 = "this is string example....wow!!!";
str2 = "exam";

print str1.find(str2)
print str1.find(str2, 10)
print str1.find(str2, 40)

結果

15
15
-1
9 index(str、beg = 0、end = len(string))

find()と同じですが、strが見つからない場合は例外を送出します。

#!/usr/bin/python

str1 = "this is string example....wow!!!";
str2 = "exam";

print str1.index(str2)
print str1.index(str2, 10)
print str1.index(str2, 40)

結果

15
15
Traceback (most recent call last):
  File "test.py", line 8, in 
  print str1.index(str2, 40);
ValueError: substring not found

shell returned 1
10 isalnum()

文字列が1文字以上で、すべての文字が英数字の場合はtrueを返し、そうでない場合はfalseを返します。

#!/usr/bin/python

str = "this2009";  # No space in this string
print str.isalnum()

str = "this is string example....wow!!!";
print str.isalnum()

When we run above program, it produces following result:

True
False
11 isalpha()

文字列が1文字以上で、すべての文字が英字である場合はtrueを返し、そうでない場合はfalseを返します。

 

#!/usr/bin/python

str = "this";  # No space & digit in this string
print str.isalpha()

str = "this is string example....wow!!!";
print str.isalpha()

結果

True
False
12 isdigit()

文字列に数字だけが含まれている場合はtrueを返し、そうでない場合はfalseを返します。

 

#!/usr/bin/python

str = "123456";  # Only digit in this string
print str.isdigit()

str = "this is string example....wow!!!";
print str.isdigit()

結果

True
False
13 islower()

stringが少なくとも1つのケース文字を持ち、すべてのケース文字が小文字であれば真を返し、そうでなければ偽を返します。

#!/usr/bin/python

str = "THIS is string example....wow!!!"; 
print str.islower()

str = "this is string example....wow!!!";
print str.islower()

結果

False
True
14 isnumeric()

ユニコード文字列に数字のみが含まれている場合はtrueを返し、そうでない場合はfalseを返します。

#!/usr/bin/python


str = u"this2009";  
print str.isnumeric()

str = u"23443434";
print str.isnumeric()

結果

False
True
15 isspace()

文字列に空白文字のみが含まれている場合はtrueを返し、そうでない場合はfalseを返します。

#!/usr/bin/python

str = "       "; 
print str.isspace()

str = "This is string example....wow!!!";
print str.isspace()

結果

True
False
16 istitle()

文字列が適切に “titlecased”の場合はtrueを返し、そうでない場合はfalseを返します。

#!/usr/bin/python


str = "This Is String Example...Wow!!!";
print str.istitle()

str = "This is string example....wow!!!";
print str.istitle()

結果

True
False
17 isupper()

文字列に少なくとも1つのケース文字があり、すべてのケース文字が大文字の場合はtrueを返し、そうでない場合はfalseを返します。

#!/usr/bin/python

str = "THIS IS STRING EXAMPLE....WOW!!!"; 
print str.isupper()

str = "THIS is string example....wow!!!";
print str.isupper()

結果

True
False
18 join(seq)

シーケンスseqの要素の文字列表現を、区切り文字列を含む文字列にマージ(連結)します。

#!/usr/bin/python

s = "-";
seq = ("a", "b", "c"); # This is sequence of strings.
print s.join( seq )

結果

a-b-c
19 len(文字列)

文字列の長さを返します。

#!/usr/bin/python

str = "this is string example....wow!!!";

print "Length of the string: ", len(str)

結果

Length of the string:  32
20 ljust(width [、fillchar])

元の文字列を合計幅の列に左揃えにして、スペースが埋め込まれた文字列を返します。

#!/usr/bin/python

str = "this is string example....wow!!!";

print str.ljust(50, '0')

結果

this is string example....wow!!!000000000000000000
21 lower()

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

#!/usr/bin/python

str = "THIS IS STRING EXAMPLE....WOW!!!";

print str.lower()

結果

this is string example....wow!!!
22 lstrip()

文字列内の先頭の空白をすべて削除します。

#!/usr/bin/python

str = "     this is string example....wow!!!     ";
print str.lstrip()
str = "88888888this is string example....wow!!!8888888";
print str.lstrip('8')

結果

this is string example....wow!!!
this is string example....wow!!!8888888
23 maketrans()

変換関数で使用する変換テーブルを返します。

#!/usr/bin/python

from string import maketrans   # Required to call maketrans function.

intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab)

str = "this is string example....wow!!!"
print str.translate(trantab)

結果

th3s 3s str3ng 2x1mpl2....w4w!!!
24 max(str)

文字列strから最大のアルファベット文字を返します。zxyの順番

#!/usr/bin/python

str = "this is really a string example....wow!!!";
print "Max character: " + max(str)

str = "this is a string example....wow!!!";
print "Max character: " + max(str)

結果

Max character: y
Max character: x
25 min(str)

文字列strから最小のアルファベット文字を返します。

#!/usr/bin/python

str = "this-is-real-string-example....wow!!!";
print "Min character: " + min(str)

str = "this-is-a-string-example....wow!!!";
print "Min character: " + min(str)

結果

Min character: !
Min character: !
26 replace(old、new [、max])

maxが指定されている場合は、string内のoldのすべての出現をnewまたは最大出現数で置き換えます。

#!/usr/bin/python

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

結果

thwas was string example....wow!!! thwas was really string
thwas was string example....wow!!! thwas is really string
27 rfind(str、beg = 0、end = len(string))

find()と同じですが、string内で後方に検索します。

#!/usr/bin/python

str1 = "this is really a string example....wow!!!";
str2 = "is";

print str1.rfind(str2)

print str1.rfind(str2, 0, 10)
print str1.rfind(str2, 10, 0)

print str1.find(str2)
print str1.find(str2, 0, 10)
print str1.find(str2, 10, 0)

結果

5
5
-1
2
2
-1
28 rindex(str、beg = 0、end = len(string))

index()と同じですが、文字列で後方に検索します。

#!/usr/bin/python

str1 = "this is string example....wow!!!";
str2 = "is";

print str1.rindex(str2)
print str1.index(str2)

結果

5
2
29 rjust(width、[、fillchar])

元の文字列を右揃えにしてスペースが埋め込まれた文字列を返します。

30 rstrip()

文字列の末尾の空白をすべて削除します。

#!/usr/bin/python

str = "this is string example....wow!!!";

print str.rjust(50, '0')

結果

000000000000000000this is string example....wow!!!
31 split(str = “”、num = string.count(str))

区切り文字str(提供されていなければスペース)に従って文字列を分割し、部分文字列のリストを返します。与えられた場合、最大でnum個の部分文字列に分割されます。

#!/usr/bin/python

str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( )
print str.split(' ', 1 )

結果

['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
32 splitlines(num = string.count( ‘\ n’))

すべての(またはnum)NEWLINEで文字列を分割し、NEWLINEが削除された各行のリストを返します。

#!/usr/bin/python

str = "Line1-a b c d e f\nLine2- a b c\n\nLine4- a b c d";
print str.splitlines( )
print str.splitlines( 0 )
print str.splitlines( 3 )
print str.splitlines( 4 )
print str.splitlines( 5 )

結果

['Line1-a b c d e f', 'Line2- a b c', '', 'Line4- a b c d']
['Line1-a b c d e f', 'Line2- a b c', '', 'Line4- a b c d']
['Line1-a b c d e f\n', 'Line2- a b c\n', '\n', 'Line4- a b c d']
['Line1-a b c d e f\n', 'Line2- a b c\n', '\n', 'Line4- a b c d']
['Line1-a b c d e f\n', 'Line2- a b c\n', '\n', 'Line4- a b c d']
33 startswith(str、beg = 0、end = len(string))

stringの文字列または部分文字列(開始インデックスbegおよび終了インデックスendが指定されている場合)が部分文字列strで始まるかどうかを判定します。あれば真を返し、そうでなければ偽を返します。

#!/usr/bin/python

str = "this is string example....wow!!!";
print str.startswith( 'this' )
print str.startswith( 'is', 2, 4 )
print str.startswith( 'this', 2, 4 )

結果

True
True
False
34 strip([chars])

stringのlstrip()とrstrip()の両方を実行します。

#!/usr/bin/python

str = "0000000this is string example....wow!!!0000000";
print str.strip( '0' )

結果

this is string example....wow!!!

 

35 swapcase()

文字列内のすべての文字を反転します。

#!/usr/bin/python

str = "this is string example....wow!!!";
print str.swapcase()

str = "THIS IS STRING EXAMPLE....WOW!!!";
print str.swapcase()

結果

THIS IS STRING EXAMPLE....WOW!!!
this is string example....wow!!!
36 title()

stringの “titlecased”バージョンを返します。つまり、すべての単語が大文字で始まり、残りは小文字です。

#!/usr/bin/python

str = "this is string example....wow!!!";
print str.title()

結果

This Is String Example....Wow!!!
37 translate(table、deletechars = “”)

変換テーブルstr(256文字)に従って文字列を変換し、del文字列内の文字列を削除します。

38 upper()

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

#!/usr/bin/python

str = "this is string example....wow!!!";

print "str.capitalize() : ", str.upper()

結果

str.capitalize() :  THIS IS STRING EXAMPLE....WOW!!!
39 zfill (width)

トータルの幅文字にゼロを左揃えした元の文字列を返します。zfill()は与えられた符号を保持します(ゼロより1つ少ない)。

#!/usr/bin/python

str = "this is string example....wow!!!";

print str.zfill(40)
print str.zfill(50)

結果

00000000this is string example....wow!!!
000000000000000000this is string example....wow!!!
40 isdecimal()

ユニコード文字列に小数点文字のみが含まれている場合はtrueを返し、そうでない場合はfalseを返します。

#!/usr/bin/python


str = u"this2009";  
print str.isdecimal();

str = u"23443434";
print str.isdecimal();

結果

False
True

前のページ⑨Pythonの数値

次のページ⑪






スポンサーリンク

プログラミングは独学からは挫折の可能性が高いです。まずは無料体験ができる
コードキャンプが本当におすすめ。無料体験でわからないところを聞きましょう。
転職補助つき。カリキュラム終了後に転職紹介をしてくれます。