![見出し画像](https://assets.st-note.com/production/uploads/images/132004212/rectangle_large_type_2_c2fee3e5a8dae785384f54ba21082a9f.jpeg?width=1200)
設定ファイルを読み込むクラス(Python)
プログラムの実行に必要な条件は、ソースコードの中に書いてもよいのですが、頻繁に書き換えたり、使い分けたりする場合は、別のファイルにしておくほうが管理しやすいと思います。Pythonでも同様なので、設定ファイルを読み込むクラスを作りました。なお、Pythonの勉強も兼ねて作成しましたので、良いコードではないかもしれません。ご容赦ください。
使い方
config.pyをインポートして、Config("設定ファイル名") としてインスタンスを作ってください。プロパティーに設定ファイルに書いた内容がセットされます。
クラスConfig内に自由にプロパティー(変数)を作ってください。変数、List、dictにも値を入れることができます。関数setvalue()の if文で各プロパティーに値を入れるように書き換えてください。wdが名前、valが値です。詳細はソースコードと設定ファイル例を見てください
import config.py
cfg = Config("xyz.ini")
ソースコード
import pprint
class Config():
#プロパティー
folderlist:list=[]
userdict:dict ={}
arekore:str
size:int
rate:float
def setvalue(self, wd :str, val :str) ->None:
#引用符が使われているときは 、取る
if wd == "folderlist": #listに入れる
v:str = self.remQM(val)
self.folderlist.append(v)
elif wd == "userdict": #辞書に入れる
u:list = val.split(",")
ky :str = self.remQM(u[0])
it :str = self.remQM(u[1])
self.userdict[ky] = it
elif wd == "arekore":
v :str = self.remQM(val)
self.arekore = v
elif wd == "size":
self.size = int(val)
elif wd == "rate":
self.rate = float(val)
return
#ファイルのデータから変数に値をセットする
def configmain(self, d:str):
#行に分割
data :list = d.split("\n")
#各行ごとに
for ln in data:
#前後の空白を取る
line:str = ln.strip()
#空行は飛ばす
if len(line) == 0:
continue
#コメント行は飛ばす
if line[0] in "#!$%&@":
continue
#イコールで分割し 、キーワードと値に分ける
wdval:list = line.split("=") # "="で分割
#=で分割できないデータは飛ばす
if len(wdval) < 2:
continue
wd:str = wdval[0].strip() #keyword 。小文字に変換
val:str = wdval[1].strip() #value
self.setvalue(wd, val)
return
def remQM(self, s :str) -> str:
#先頭に引用符が使われているときは 、両端から1文字ずつ取る
s = s.strip()
if s[0] in "\'\"":
s = s[1:-1]
return s
def __init__(self,fname) -> None:
d:str = self.readfile(fname)
self.configmain(d)
return
def readfile(self, fname:str) -> str:
f = open(fname, "r")
d:str = f.read()
f.close()
return d
def main():
cfg = Config("xyz.ini")
print("variables:")
pprint.pprint(cfg.__dict__)
print("folderlist =")
pprint.pprint(cfg.folderlist)
print("userdict =")
pprint.pprint(cfg.userdict)
return
# main
if __name__ == "__main__":
main()
設定ファイルの例
### フォルダ。リストに入れるもの。
folderlist = "c:\users\Pictures\abc"
folderlist = "c:\users\Pictures\def"
folderlist = "c:\users\Pictures\ghi\jkl"
folderlist = "c:\users\Videos\pqrst
###名前と所属。辞書に入れるもの。
userdict = "Yayoi", "人事部"
userdict = "Akiko", "技術部"
userdict = "美佐江", "営業部3課"
userdict = "みゆき", "解雇済み"
userdict = "加奈子", "経理部2課"
###変数に入れるもの #ファイル名
arekore = "data.xlsm, codename.doc" #サイズ
size = 65536 #浮動点少数
rate = 3.1415926
実行例
config.pyだけを実行すると、ファイルから取得した内容を表示します(この部分の関数main()も書き換えが必要)。以下に結果を示します。設定ファイルと比較してみてください。
variables:
{'arekore': 'data.xlsm, codename.doc', 'rate': 3.1415926, 'size': 65536}
folderlist =
['c:\\users\\Pictures\\abc',
'c:\\users\\Pictures\\def',
'c:\\users\\Pictures\\ghi\\jkl',
'c:\\users\\Videos\\pqrs']
userdict =
{'Akiko': '技術部', 'Yayoi': '人事部', 'みゆき': '解雇済み', '加奈子': '経理部2課', '美佐江': '営業部
3課'}
以上
応援してやろうということで、お気持ちをいただければ嬉しいです。もっと勉強したり、調べたりする糧にしたいと思います。