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桁に変化しても位置がずれません。