'20/07/18更新:書式が一部古かったのを更新
置換はreplaceメソッドを使用して、str.replace([置換したい文字列], [置換後の文字列])とする。
折角なので、乱数生成の方法についても記載する。
random.randint(下限値, 上限値) # 整数型の場合
random.uniform(下限値, 上限値) # 浮動小数点数型の場合
本プログラムの仕様を説明する。置換元のテンプレートのファイル(下図左)を元に、実行後は複数箇所を置換してファイルを別名で保存する(下図右)。

実行前のファイルは、下図のようにテンプレートのtemp.txtと、プログラム本体のmakefile.pyの二つ。

▼テンプレートファイル(temp.txt)
置換したいのは、@で囲まれている箇所で複数ある。
abcdefg
12345
No1 = @MY_NO_PATTARN@
No2 = @MY_NO_PATTARN2@
Random_randint = @MY_RANDOM_RANDINT@
Random_uniform = @MY_RANDOM_UNIFORM@
path = @MY_PATH@
12345
▼本プログラム(makefile.py)
指定した範囲の連番ファイルを生成し、各ファイル内の置換内容は指定した範囲の乱数を生成する。実行はコマンドラインでargvで引数を受け付ける仕様。置換はreplaceメソッドを使用する。
import os, sys
import random
def makeFile(path, myInFname, myNum1, myNum2):
for i in range(int(myNum1), int(myNum2)+1):
myRanR = random.randint(80, 100)
myRanU = random.uniform(-5, 0)
with open("derive_" + myInFname[:-4] + "_" + str(i) + ".txt", "w") as f2:
with open(myInFname, "r") as f1:
for row in f1:
buf = row.replace("@MY_NO_PATTARN@", str(i)) \
.replace("@MY_NO_PATTARN2@", str("{0:03d}".format(i))) \
.replace("@MY_PATH@", path) \
.replace("@MY_RANDOM_UNIFORM@", str(myRanU)) \
.replace("@MY_RANDOM_RANDINT@", str(myRanR))
f2.write(buf)
if __name__ == '__main__':
if(len(sys.argv)!=4):
print("input mismatch")
print("Usage: python progfile inputfile start_no end_no")
print("argv element-> 0 1 2 3 ")
path = os.getcwd()
myInFname = sys.argv[1]
myNum1 = sys.argv[2]
myNum2 = sys.argv[3]
makeFile(path, myInFname, myNum1, myNum2)
print("finished")
実行例を下図に示す。コマンドライン(CL)で本体プログラム名 テンプレート名 開始番号 終了番号 の順に打ってエンターキーを押す。

すると、下図のようにテンプレートファイルはそのままに、連番ファイルが3~10で生成され、中身はそれぞれ置換されている(冒頭画像のように)。

以上
<広告>
リンク