Pythonに挑戦(11)
pythonで使われるメソッドについて説明します。メソッドは何らかのクラスに付属している関数です。
(1) append,extend,insert, index, reverse, sort, len, count, remove, clear, pop, copy
リストのメソッドです。文字列でもリストと同様の動作をします。
appendはリスト要素の末尾に要素を追加します。extendはリスト末尾に別のリストやタプルを結合します。insertはリストの指定位置に要素を挿入します。
appendはリスト要素の末尾に要素を追加します。extendはリスト末尾に別のリストやタプルを結合します。insertはリストの指定位置に要素を挿入します。
e1 = [ 1, 2, 3 ]
e1.append(5)
print(e1)
e1.append(5)
print(e1)
とすると、画面に、[ 1, 2, 3, 5 ]と表示します。
e2 = [ “abc”, “de”, “f” ]
e2.append(“kpx”)
print(e2)
e2.append(“kpx”)
print(e2)
とすると、画面に、[ ‘abc’, ‘de’, ‘f’, ‘kpx’ ]と表示します。
e1.extend((10, 11, 12))
としても、
e1.extend([ 10, 11, 12 ])
としても、
print(e1)
とすると、画面に、[ 1, 2, 3, 5, 10, 11, 12 ]と表示します。insertは、リストの途中に要素を挿入する関数です。
e2.insert(3, “ghi”)
print(“e2:“, e2)
print(“e2:“, e2)
とすると3番目に‘ghi’が挿入されて、画面に、e2: [ ‘abc’, ‘de’, ‘f’, ‘ghi’, ‘kpx’ ]と表示します。第1引数に-1を指定すると末尾の1つ手前、-2を指定すると末尾の2つ手前に挿入されます。第1引数に0を指定すると先頭に挿入します。また、第2引数にリストを指定すると、extendとは違い、指定位置にそのリストが挿入されます。
indexメソッドは、指定した要素のリスト中の順番を取得するメソッドです。
reverseメソッドは、リスト中の要素の順番を逆にするメソッドです。
sortメソッドは、リスト中の要素を昇順にソートするメソッドです。
lenメソッドは、リスト中の要素の個数を取得するメソッドです。文字列の場合、文字列の長さが得られます。
countメソッドは、リスト中に指定した要素が何個あるか数えるメソッドです。
removeメソッドは、リスト中から指定した要素を削除するメソッドです。
clearメソッドは、リストの全要素を削除してからリストにするメソッドです。
popメソッドは、リスト中の引数で指定する順番の要素を取り出し、リストからは削除するメソッドです。
copyメソッドは、リストの全要素を有する別のリストを作成するメソッドです。
indexメソッドは、指定した要素のリスト中の順番を取得するメソッドです。
reverseメソッドは、リスト中の要素の順番を逆にするメソッドです。
sortメソッドは、リスト中の要素を昇順にソートするメソッドです。
lenメソッドは、リスト中の要素の個数を取得するメソッドです。文字列の場合、文字列の長さが得られます。
countメソッドは、リスト中に指定した要素が何個あるか数えるメソッドです。
removeメソッドは、リスト中から指定した要素を削除するメソッドです。
clearメソッドは、リストの全要素を削除してからリストにするメソッドです。
popメソッドは、リスト中の引数で指定する順番の要素を取り出し、リストからは削除するメソッドです。
copyメソッドは、リストの全要素を有する別のリストを作成するメソッドです。
print(“e1中の11のindexは“, e1.index(11))
print(“e2中のdeのindexは“, e2.index(“de”))
e2.reverse()
print(“e2を反転したリスト:“, e2)
e2.sort()
print(“e2をソートしたリスト:“, e2)
e2.append(“de”)
print(“e2:“, e2)
print(“e2中のdeの個数は“, e2.count(“de”))
e2.remove(“ghi”)
print(“e2中のghiを削除したリスト“, e2)
e1.clear()
print(“clear後のe1:“, e1)
print(“e2からfをpop”, e2.pop(2), “pop後のe2:“, e2)
e3 = e2.copy()
print(“e2からcopyされたe3:“, e3)
print(“e2中のdeのindexは“, e2.index(“de”))
e2.reverse()
print(“e2を反転したリスト:“, e2)
e2.sort()
print(“e2をソートしたリスト:“, e2)
e2.append(“de”)
print(“e2:“, e2)
print(“e2中のdeの個数は“, e2.count(“de”))
e2.remove(“ghi”)
print(“e2中のghiを削除したリスト“, e2)
e1.clear()
print(“clear後のe1:“, e1)
print(“e2からfをpop”, e2.pop(2), “pop後のe2:“, e2)
e3 = e2.copy()
print(“e2からcopyされたe3:“, e3)
とすると、画面には、
e1中の11のindexは 5
e2中のdeのindexは 1
e2を反転したリスト: [‘kpx’, ‘f’, ‘ghi’, ‘de’, ‘abc’]
e2をソートしたリスト: [‘abc’, ‘de’, ‘f’, ‘ghi’, ‘kpx’]
e2: [‘abc’, ‘de’, ‘f’, ‘ghi’, ‘kpx’, ‘de’]
e2中のdeの個数は 2
e2中のghiを削除したリスト [‘abc’, ‘de’, ‘f’, ‘kpx’, ‘de’]
clear後のe1: []
e2からfをpop f pop後のe2: [‘abc’, ‘de’, ‘kpx’, ‘de’]
e2からcopyされたe3: [‘abc’, ‘de’, ‘kpx’, ‘de’]
e2中のdeのindexは 1
e2を反転したリスト: [‘kpx’, ‘f’, ‘ghi’, ‘de’, ‘abc’]
e2をソートしたリスト: [‘abc’, ‘de’, ‘f’, ‘ghi’, ‘kpx’]
e2: [‘abc’, ‘de’, ‘f’, ‘ghi’, ‘kpx’, ‘de’]
e2中のdeの個数は 2
e2中のghiを削除したリスト [‘abc’, ‘de’, ‘f’, ‘kpx’, ‘de’]
clear後のe1: []
e2からfをpop f pop後のe2: [‘abc’, ‘de’, ‘kpx’, ‘de’]
e2からcopyされたe3: [‘abc’, ‘de’, ‘kpx’, ‘de’]
と表示されます。
(2) read, wirte, closeメソッド
ファイル・オブジェクトには、読み書き用のread, wirte, readline, readlines, writelinesなどのメソッド、ファイルを閉じるためのcloseメソッドが用意されています。ファイルを開くにはopen()関数を使います。
f1 = open(“C:\\python\\sample1.txt”, “w”)
として、ファイル・オブジェクトf1を開いたとします。
文字列として定義されているバッファb1の内容をファイルf1に書き込む場合は、
文字列として定義されているバッファb1の内容をファイルf1に書き込む場合は、
f1.write(b1)
f1.close()
f1.close()
とします。リストe1 = [“apple”, “orange”, “peach”]の内容をファイルf1に書き込むときは、writelinesメソッドを用いて、
f1.writelines(e1)
f1.close()
f1.close()
とすると、改行なしで連結されて、“appleorangepeach”という文字列が書き込まれます。リストの要素一つずつに改行コード‘\n’を付加したい場合、map()関数を利用して、
def crlf(str):
return str + ‘\n’
e2 = map(crlf, e1)
f1.writelines(e2)
f1.close()
f1.writelines(e2)
f1.close()
とすれば、ファイルに“apple\norange\npeach\n”という文字列が書き込まれます。‘\n’は改行コードです。
あるいは、print文(ファイルに出力する場合には、fileオプションでファイル・オブジェクトを指定します。デフォルトで改行コードを付加します)、for文を用いて、
あるいは、print文(ファイルに出力する場合には、fileオプションでファイル・オブジェクトを指定します。デフォルトで改行コードを付加します)、for文を用いて、
for s1 in e1:
print(s1, file=f1)
f1.close()
とすれば、ファイルに“apple\norange\npeach\n”という文字列が書き込まれます。
“apple\norange\npeach\n”と書き込まれている“C:\python\sample1.txt”というファイルを、
f1 = open(“C:\\python\\sample1.txt”, “r”)
として、ファイル・オブジェクトf1を開いたとします。
str1 = f1.read()
とすると、str1に、ファイル内容全体、文字列“apple\norange\npeach\n”が入ります。readメソッドは読み込みバイト数を指定できます。10バイト読み込むであれば、
str1 = f1.read(10)
とします。str1に文字列“apple\noran”が入ります。open()後、
str1 = f1.readline()
str2 = f1.readline()
str3 = f1.readline()
str4 = f1.readline()
str2 = f1.readline()
str3 = f1.readline()
str4 = f1.readline()
とすると、readlineメソッドはファイルから1行ずつ読み込んで、str1に文字列“apple”が入り、str2に文字列“orange”が入り、str3に文字列“peach”が入り、ここでファイル末尾に達するので、str4は空文字となります。readline()メソッドが空文字を返すかどうかで、ファイル末尾に達したかどうかを判定できます。リストに一気に読み込む場合には、readlines()メソッドを用います。open()後、
e1 = f1.readlines()
とすると、リストe1は、e1 = [“apple\n”, “orange\n”, “peach\n”]となります。
ファイル・オブジェクトf1に関する処理を終了したら、以下のように必ずクローズしておきます。
ファイル・オブジェクトf1に関する処理を終了したら、以下のように必ずクローズしておきます。
f1.close()
(3) formatメソッド
画面出力、ファイル出力する文字列を整形を行うための文字列(書式指定文字列)のメソッドです。format関数と違い、位置指定引数(第1引数か、第2引数か、という具合に、何番目の引数かということで、どの引数かを指定する)を用いて複数のデータに対応できます。位置指定引数を用いない場合は、書式指定文字列の中で{}(置換フィールドと呼ばれます)の並びの順に、formatメソッドの引数が割り当てられていきますが、{0},{1},{2}のようにすると、{0}には第1引数、{1}には第2引数、{2}には第3引数が割り当てられます。{first}, {second}, {third}とすると、{first}には、formatメソッドの引数で、“first=”という識別子を付けた変数が割り当てられ、{second}には、formatメソッドの引数で、“second=”という識別子を付けた変数が割り当てられ、{third}には、formatメソッドの引数で、“third=”という識別子を付けた変数が割り当てられます。
j1 = 23
j2 = 71
j3 = j1 + j2
print(“{}+{}={}”.format(j1, j2, j3))
print(“{1}+{2}={0}”.format(j3, j1, j2))
print(“{third}+{first}={second}”.format(first=j2, second=j3, third=j1))
j2 = 71
j3 = j1 + j2
print(“{}+{}={}”.format(j1, j2, j3))
print(“{1}+{2}={0}”.format(j3, j1, j2))
print(“{third}+{first}={second}”.format(first=j2, second=j3, third=j1))
とすると、画面には、
23+71=94
23+71=94
23+71=94
23+71=94
23+71=94
と表示されます。辞書のキーを使って引数を指定することもできます。
d3 = {‘name’: ‘apple’, ‘price’: 320}
d4 = {‘name’: ‘orange’, ‘price’: 80}
d5 = {‘name’: ‘peach’, ‘price’: 430}
fruits = [d3, d4, d5]
for d6 in fruits:
print(“名前:{0[name]:<8s} 価格:{0[price]:>4d}円“.format(d6))
d4 = {‘name’: ‘orange’, ‘price’: 80}
d5 = {‘name’: ‘peach’, ‘price’: 430}
fruits = [d3, d4, d5]
for d6 in fruits:
print(“名前:{0[name]:<8s} 価格:{0[price]:>4d}円“.format(d6))
とすると、画面には、
名前:apple 価格: 320円
名前:orange 価格: 80円
名前:peach 価格: 430円
名前:orange 価格: 80円
名前:peach 価格: 430円
と表示されます。置換フィールド{0[name]:<8s}は、辞書d6の0番目の‘name’キー要素(appleとかorangeとかpeach)を左詰め8桁文字列として表示し、置換フィールド{0[price]:>4d}は、辞書d6の0番目の‘price’キー要素(320,80,430)を右詰め4桁の数値として表示するという意味です。
書式指定文字列は、format()メソッドの引数に対応させて、中括弧‘{‘と‘}’で挟みます。置換フィールドは、基本的に、
書式指定文字列は、format()メソッドの引数に対応させて、中括弧‘{‘と‘}’で挟みます。置換フィールドは、基本的に、
{識別子:書式指定}
という形をしています。識別子と書式指定の間に‘:’が入ります。
「識別子」部分ですが、format()メソッドの引数並びで、key1=abcとなっていれば、識別子はkey1になります。辞書の0番目のkey1要素の場合は、識別子は0[key1]となります。単に引数並びの何番目を指定するのであれば、識別子は0(1番目の引数),1(2番目の引数),2(3番目の引数)という番号になります。識別子を省略すると、{}の順番は、引数の並びの順になります。置換フィールド{… }の数よりも引数の数が少ないとエラーになります。
「書式指定」部分は、
「識別子」部分ですが、format()メソッドの引数並びで、key1=abcとなっていれば、識別子はkey1になります。辞書の0番目のkey1要素の場合は、識別子は0[key1]となります。単に引数並びの何番目を指定するのであれば、識別子は0(1番目の引数),1(2番目の引数),2(3番目の引数)という番号になります。識別子を省略すると、{}の順番は、引数の並びの順になります。置換フィールド{… }の数よりも引数の数が少ないとエラーになります。
「書式指定」部分は、
[埋める文字][align][+][#][0][最小表示桁数][小数点以下桁数][type]
のようになります。[埋める文字]は、右詰め表示桁数8桁で5桁の整数を表示するような場合、残る3桁に何を埋めるかを指定します。空白で埋めるなら‘ ‘(半角空白文字、但し表示内容が表示桁数に不足する場合、不足桁は埋める文字を指定しなければ空白で埋められます),‘ ‘(全角空白文字)を指定し、3桁分を‘*’で埋めるなら‘*’を指定します。但し、‘0’で埋める場合には、表示桁数の前に‘0’を書きます。[align]は左詰めにするときは‘<',右詰めにするときは‘>’,中央揃えにするときは‘^’を指定します。整数や実数表示で正数のときに‘+’を表示させる場合には、[+]のところに‘+’を書きます。2進数表示の時に、‘11010010’の前に接頭辞‘0b’を付けたり、16進数表示の時に、‘f2’の前に接頭辞‘0x’を付けるときに、[#]のところに‘#’を書きます。[0]は上記の不足桁に‘0’を書く場合には[0]のところに‘0’を書きます。最小表示桁数は、半角文字8文字分でも全角文字8文字分でも‘8’と書きます。但し、8桁に入らない場合は、8桁を超えるかも知れません。なお、12,345,678のように整数を3桁ずつカンマで区切って表示する場合には、[最小表示桁数]の後ろに‘,’を書きます。小数点以下を有する実数を小数点以下2桁の実数で表示させる場合は、[小数点以下桁数]は、‘.2’とします。[type]は、%表示する場合には‘%'(数値を100倍して末尾に%を付ける),2進数表示させる場合には‘b’,小文字16進数表示させる場合には‘x’,大文字16進数表示させる場合には‘X’,整数表示させる場合には‘d’,浮動小数点数を表示させるのには‘f’,指数をつける場合には‘e’または‘E’を指定します。
g1 = 12345678.345を、16桁分とり、右詰めで小数第2位までで整数部分を3桁ずつカンマで区切り、余る桁を‘*’で埋めて表示するのであれば、
g1 = 12345678.345を、16桁分とり、右詰めで小数第2位までで整数部分を3桁ずつカンマで区切り、余る桁を‘*’で埋めて表示するのであれば、
print(“{:*>+16,.2f}”.format(g1))
とすれば、画面に、**+12,345,678.35と表示されます。
j1 = 94を、10桁分とり、右詰めで接頭辞を付けて、余る桁を‘0’で埋めて表示するのであれば、
j1 = 94を、10桁分とり、右詰めで接頭辞を付けて、余る桁を‘0’で埋めて表示するのであれば、
print(“{:>#010X}”.format(j3))
とすれば、画面に、0000000X5Eと表示されます。
画面表示、ファイル出力の書式制御については、他にも、
f文字列による方法、%書式による方法があります。f文字列では、
f”{対象オブジェクト:[書式指定]}”
のようにします。書式指定は、format()メソッドの書式指定と同様です。
g1 = 123.45678
print(“f文字列による表示“, f”{g1:>16.2f}”)
print(“f文字列による表示“, f”{g1:>16.2f}”)
とすると、右詰め小数点以下2桁で、
f文字列による表示 123.46
と表示されます。
%書式は、C言語のprintf()関数と同様の書式制御を行います。基本的に、
%[マップキー][変換フラグ][最小桁数][小数点以下桁数][変換型]
という形をしています。これに続いて、演算子%で挟んで、表示するオブジェクトをタプル形式で並べます。
[マップキー]では、表示するオブジェクトをタプル形式ではなく辞書式に並べます。
[マップキー]では、表示するオブジェクトをタプル形式ではなく辞書式に並べます。
print(“名前:%(name)s,価格:%(price)d円” % {“name”:”apple”, “price”:320})
とすると、画面に、
名前: apple,価格: 320 円
と表示します。
[変換型]に、‘#’と書くと、2進数出力に接頭辞‘0b’,8進数出力に接頭辞‘0o’,16進数出力に接頭辞‘0x’が付きます。‘-‘を書くと左寄せで表示します(それ以外は右寄せです)。‘+’とすると正数の場合に‘+’を付けます。‘0’とすると、空き桁を0で埋めます。
[最小桁数]は、表示するときの最小桁数を指定します。桁数不足になるときは無視されます。
[小数点以下桁数]は、‘.'(ピリオド)に続けて整数で指定します。
[変換型]は、以下の文字を1文字で指定します。代表的なものだけ書きます。
[変換型]に、‘#’と書くと、2進数出力に接頭辞‘0b’,8進数出力に接頭辞‘0o’,16進数出力に接頭辞‘0x’が付きます。‘-‘を書くと左寄せで表示します(それ以外は右寄せです)。‘+’とすると正数の場合に‘+’を付けます。‘0’とすると、空き桁を0で埋めます。
[最小桁数]は、表示するときの最小桁数を指定します。桁数不足になるときは無視されます。
[小数点以下桁数]は、‘.'(ピリオド)に続けて整数で指定します。
[変換型]は、以下の文字を1文字で指定します。代表的なものだけ書きます。
d:符号付き10進整数
u:(正整数として)10進整数
e:指数表記浮動小数点数
f:10進表記浮動小数点数
c:1文字
s:文字列
o:8進数表示
x:16進数表示
b:2進数表示
u:(正整数として)10進整数
e:指数表記浮動小数点数
f:10進表記浮動小数点数
c:1文字
s:文字列
o:8進数表示
x:16進数表示
b:2進数表示
例えば、
print(“%方式による表示“, “%16.2f” % 123.45678)
とすると、画面に、
%方式による表示 123.46
と表示されます。