Python.use(better) #body: step09 -- print("".join(s),end="")
‖記事一覧‖ Python.use(better)《Python3.1》
body: step09 -- print("".join(s),end="")
《著》森こねこ、小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28
課題を作成する過程を通して「ファイル操作」の理解を深めます。
※ Python1.5 で作成した例題を、Python3.1 で再構成しました。
事例:コードの解説
def body(file, start=1, end=None): with open(file) as s: s = s.readlines() format = "%%%dd: %%s"%len("%d"%len(s)) s = [format%(start+i,e) #1: for i,e in enumerate(s[start-1:end])] print("".join(s),end="") ## ---------------------------------------- local = locals() ex_body3(local, "temp")
《前例》と同等の機能を「内包」で実現します。
■ #1: 内包を利用する
s = [format%(start+i,e) #1: for i,e in enumerate(s[start-1:end])] print("".join(s),end="")
start-1 から end の手前までの各要素 e をもとに、変換指令で整形した文字列 format を列挙した、部分リスト s が得られます。
- リスト s の各要素を連結 join した文字列を出力します。
事例:モジュールを起動する
■ 全項目を確認する
全ステップの「項目」を確認するには、関数 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(9) >>> # -------------------------------------------------- step09 >>> body('temp') 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 >>> body('temp',end=3) 1: A - 65 2: B - 66 3: C - 67 >>> body('temp',start=8) 8: H - 72 9: I - 73 10: J - 74 >>> body('temp',start=3,end=5) 3: C - 67 4: D - 68 5: E - 69 >>> body('temp',end=8,start=6) 6: F - 70 7: G - 71 8: H - 72 >>>
ファイル 'temp' を作成するとともに、行番号に続いて各行を出力します。
- 先頭行から 3 行目までを出力します。
- 8 行目から末尾行までを出力します。
- 3 行目から 5 行目までを出力します。
- 6 行目から 8 行目までを出力します。
《余録》テストケース
def ex_body3(local, n):
ex_body2(local, n)
source = '''
body({0!r},start=8)
body({0!r},start=3,end=5)
body({0!r},end=8,start=6)
'''.split("\n")
for e in source[1:-1]:
print_(e.format(n), local)
》こちらに移動中です《
↑TOP