パイクラおじさんの日記

MinecraftでPythonを勉強するおじさんの日記です。

引数と文字列フォーマット

100個のXMLファイルを個別に処理するにしても、その度にソースコードを書き換えるのは面倒なので、引数で指定したい。

引数

引数にアクセスするにはsysをインポートして、配列sys.argvで参照する。

# coding: utf-8

import sys

print(sys.argv)

argv.pyとして保存し、実行してみる。

$ python argv.py
['argv.py']

$ python argv.py 1 20 300 abc
['argv.py', '1', '20', '300', 'abc']

と、こんな感じ。

$ python argv.py 5340 22 n

こんな感じに指定したい。(n=0〜99)

「5340と22はどうも分けておいた方がいいかな?」と思って。

文字列のフォーマット

渡された引数からディレクトリとファイル名を生成したい。

ファーマット指定の文字列に書き換えたい場所に{}を入れて、.format(…)で引数を渡す。 で、{}内に引数の順番とフォーマット形式も書ける。

# coding: utf-8

import sys

GEO_DIR = "FG-GML-{0:04d}-{1:02d}-DEM5A"
GEO_XML = "FG-GML-{0:04d}-{1:02d}-{2:02d}-DEM5A-20161001.xml"

if len(sys.argv) < 4:
    print("argv_fmt.py area1 area2 subarea")
    exit(-1)

area1 = int(sys.argv[1])
area2 = int(sys.argv[2])
subarea = int(sys.argv[3])

dir = GEO_DIR.format(area1, area2)
fname = GEO_XML.format(area1, area2, subarea)

print("dir=", dir)
print("fname=", fname)

実行すると、こんな感じ。

$ python argv_fmt.py 5340 22 0
dir= FG-GML-5340-22-DEM5A
fname= FG-GML-5340-22-00-DEM5A-20161001.xml

さて、これらをxmlparse.pyに組み込めばOK。