変数の保存
変数の保存を行うクラスです
関数に分けられてるので自由に使ってください
SaveTextはクラス名です
add関数 : 変数を上書き保存または新しく保存する関数です
delete関数 : 変数を削除する関数です
search関数 : 対応する変数のデータを読み取る関数です
引数
add関数はname : 名前、data : データ、path : パスです
nameには":"を使わないでください
delete関数はname : 名前、path : パス
search関数はname : 名前、path : パス、type : 変数の型
typeの初期値は"string or bool"です
出力時にstringまたはboolで出力します
ほかには int float bool stringがあります
保存時の変数の形は関係ありません
なので"12" : stringとstring型で保存したデータをsearch関数ではtype : intとすると呼び出すときの形は12 : intです
コード
osモジュールを呼び出しています
if name == "main": 以降のプログラムはテスト用のプログラムであり、SaveTextクラスとは関係ありません
# author : yuisa
# creation-day y-2023 m-8 d-14
import os
class SaveText:
# add関数は変数を保存する関数です
# 引数は変数名 : name , データ : data , ファイルパス : pathです
# nameに ":" を入れないでください
# nameをFalseまたはTrueにしないでください
# 同じ名前がある場合上書き保存をしなかった場合新しく変数を作ります
def add(name, data, path):
SaveText.create_text_file(path)
lines = []
name_lines = []
data_lines = []
if os.path.isfile(path):
lines = SaveText.textfile_data_list(path) # textfile内のデータを行ずつリストに入れる
SaveText.clear(path) # ファイル内を削除
name_lines, data_lines = SaveText.separate_data_and_names(lines) # name と dataでリストに分ける
existvariable = False
for lineindex in range(len(lines)):
if name_lines[lineindex] == name: # 同じ名前のリストを探す
existvariable = True
name_lines[lineindex] = str(name) # namelistに変数名を書き込む
data_lines[lineindex] = str(data) # datalistに新しいデータを書き込む
break
if not existvariable: # 変数が存在しなかったら
name_lines.append(str(name)) # 変数を追加する
data_lines.append(str(data))
SaveText.write_to_text_file(name_lines, data_lines, path) # テキストファイルにnameとdataを関連させて保存する
def delete(name, path):
SaveText.create_text_file(path)
lines = []
name_lines = []
data_lines = []
if os.path.isfile(path):
lines = SaveText.textfile_data_list(path)
SaveText.clear(path)
name_lines, data_lines = SaveText.separate_data_and_names(lines)
for lineindex in range(len(lines)):
if name_lines[lineindex] == name:
del name_lines[lineindex]
del data_lines[lineindex]
break
SaveText.write_to_text_file(name_lines, data_lines, path)
# typeは出力時の変数の型を指定するための引数です
# 初期値はstring or bool string型またはbool型で出力します
# int はint型で出力します
# float はfloat型で出力します
# bool はbool型で出力します
# string はstring型で出力します
def search(name , path, type = "string or bool"):
SaveText.create_text_file(path)
lines = []
name_lines = []
data_lines = []
if os.path.isfile(path):
lines = SaveText.textfile_data_list(path)
name_lines, data_lines = SaveText.separate_data_and_names(lines)
for lineindex in range(len(lines)):
if name_lines[lineindex] == name:
if type == "string or bool":
if data_lines[lineindex] == "True":
return True
if data_lines[lineindex] == "False":
return False
return data_lines[lineindex]
if type == "int":
return int(data_lines[lineindex])
if type == "float":
return float(data_lines[lineindex])
if type == "bool":
if data_lines[lineindex] == "True":
return True
if data_lines[lineindex] == "False":
return False
if type == "string":
return data_lines[lineindex]
def create_text_file(path):
with open(path, 'r') as file:
pass
# 開発者用
def clear(path):
with open(path, 'w') as file:
file.write('') # ファイルの内容を削除
def textfile_data_list(path):
lines = []
with open(path, 'r') as file:
for line in file:
lines.append(line.strip()) # すべてのデータをlistに追加する
return lines
def separate_data_and_names(lines):
name_lines = []
data_lines = []
for line in lines:
try:
namelength = line.index(":")
datalength = len(line)
name_lines.append(line[:namelength])
data_lines.append(line[namelength + 1:datalength])
except:
pass
return name_lines, data_lines
def write_to_text_file(name, data, path):
with open(path, 'w') as file:
for index in range(len(name)):
file.write(name[index] + ":" + data[index] + '\n') # 各要素を一行ずつ書き込む
if __name__ == '__main__':
SaveText.create_text_file("savedata.txt")
newvariable = 120
newvariable_modoki = 10
hanbetuD = True
print("----------------ファイル入出力前--------------------")
print("modoki" + " : " + str(newvariable_modoki))
print("not modoki" + " : " + str(newvariable))
SaveText.add("newvariable", newvariable, "savedata.txt")
SaveText.add("D", hanbetuD, "savedata.txt")
SaveText.add("pokemon", 11, "savedata.txt")
SaveText.add("dorakue", 110, "savedata.txt")
SaveText.add("pu-ta", 2525, "savedata.txt")
print("----------------ファイル入出力あと--------------------")
newvariable_modoki = SaveText.search("newvariable", "savedata.txt", "int") + 10
hanbetuD = SaveText.search("D", "savedata.txt")
print("modoki" + " : " + str(newvariable_modoki))
print("not modoki" + " : " + str(newvariable))
print(hanbetuD)