Python.use(better) #body: step05 -- print(format%(n,e),end="")

記事一覧 Python.use(better)《Python3.1》

body: step05 -- print(format%(n,e),end="")

《著》森こねこ、小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28

課題を作成する過程を通して「ファイル操作」の理解を深めます。
※ Python1.5 で作成した例題を、Python3.1 で再構成しました。

事例:コードの解説

    def body(file):
        with open(file,"w") as s:
            for e in "ABCDEFGHIJ":
                s.write("%s - %d\n"%(e,ord(e)))

        with open(file,"r") as s:
            s = s.readlines()
            n = len(s)
            print("name=%r (%d lines)"%(file,n))

            format = "%%%dd: %%s"%len("%d"%n)
            for i,e in enumerate(s):
                n = i+1
                print(format%(n,e),end="")
■ #1: 文字列整形変換指令
            n = len(s)
            ...
            format = "%%%dd: %%s"%len("%d"%n)

ファイルの行数 n に合わせて、変換指令による桁数を確定します。

  • ファイルの行数 n によって、整形した文字列の長さ len("%d"%n) が決まります。
  • この長さを桁数 %d として、変換指令の中に埋め込みます。% 自身を記述するときには、二重 %% にします。

例えば、行番号が二桁のとき(たとえば、n が 10 のとき)には、次のようになります。

            format = "%%%dd: %%s"%len("10")
            format = "%%%dd: %%s"%2
            format = "%2d: %s"

事例:モジュールを起動する

■ 全項目を確認する

全ステップの「項目」を確認するには、関数 do を利用します。

$ python -i my_range.py
>>> do()
0: step00 -- open(file,"w")
1: step01 -- s.write(...)
2: step02 -- open(file,"r")
3: step03 -- for i,e in enumerate(f):
4: step04x -- f.readlines()
5: step05 -- print(format%(n,e),end="")
6: step06 -- def body(file):
7: step07 -- def body(file, end=None):
8: step08 -- def body(file, start=1, end=None):
9: step09 -- print("".join(s),end="")
>>>
■ 各項目を実行する

各ステップの「動作」を確認するには、関数 do に実引数を指定します。

>>> do(5)
>>> # -------------------------------------------------- step05
>>> body('temp')
name='temp' (10 lines)
 1: A - 65
 2: B - 66
 3: C - 67
 4: D - 68
 5: E - 69
 6: F - 70
 7: G - 71
 8: H - 72
 9: I - 73
10: J - 74
>>>

新たにファイル 'temp' を作成するとともに、行番号に続いて各行を出力します。

  • ファイル 'temp' の内容は、10 行だと分かります。

十分な幅が確保されるので、行番号が1桁から2桁に変化しても位置がずれません。

《余録》テストケース

def ex_body0(local, n):
    X = 'body({0!r})'.format(n)
    print_(X, local)

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/11/13