def __init__(self, path, dstpath, skintype=""): self.name = os.path.basename(path) self.path = path self.dir = util.join_paths(dstpath, os.path.basename(path)) self.dir = util.check_duplicate(self.dir) self.skintype = skintype # progress dialog data self.message = "" self.curnum = 0 self.maxnum = 1 # 読み込んだデータリスト self.datalist = [] self.wyd = None self.wchs = [] self.wcps = [] self.wrms = [] self.wpls = [] self.wpts = [] self.nowadventuringparties = [] # エラーログ self.errorlog = "" # pathにあるファイル・ディレクトリを # (宿ファイル,シナリオファイル,その他のファイル,ディレクトリ)に種類分け。 exts_yado = set(["wch", "wcp", "wpl", "wpt", "wrm", "whs"]) exts_sce = set(["wsm", "wid", "wcl"]) exts_ignore = set(["wck", "wci", "wcb"]) self.yadofiles = [] self.cardfiles = [] self.otherfiles = [] self.otherdirs = [] self.environmentpath = None for name in os.listdir(self.path): path = util.join_paths(self.path, name) if os.path.isfile(path): ext = cw.util.splitext(name)[1].lstrip(".").lower() if name == "Environment.wyd" and not self.environmentpath: self.environmentpath = path self.yadofiles.append(path) elif ext in exts_yado: self.yadofiles.append(path) elif ext in exts_sce: self.cardfiles.append(path) elif not ext in exts_ignore: self.otherfiles.append(path) else: self.otherdirs.append(path)
def convert(self): if not self.datalist: self.load() self.curnum = 0 # シナリオファイルをxmlに変換 for data in self.datalist: self.message = u"%s を変換中..." % (os.path.basename(data.fpath)) self.curnum += 1 try: data.create_xml(self.dir) except Exception: cw.util.print_ex() s = os.path.basename(data.fpath) s = u"%s は変換できませんでした。\n" % (s) self.write_errorlog(s) # 素材ファイルをMaterialディレクトリにコピー materialdir = util.join_paths(self.dir, "Material") if not os.path.isdir(materialdir): os.makedirs(materialdir) for path in self.materials: self.message = u"%s をコピー中..." % (os.path.basename(path)) self.curnum += 1 dst = util.join_paths(materialdir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copy2(path, dst) # その他のファイルをシナリオディレクトリにコピー for path in self.otherfiles: self.message = u"%s をコピー中..." % (os.path.basename(path)) self.curnum += 1 dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copy2(path, dst) # ディレクトリをシナリオディレクトリにコピー for path in self.otherdirs: self.message = u"%s をコピー中..." % (os.path.basename(path)) self.curnum += 1 dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copytree(path, dst) self.curnum = self.maxnum return self.dir
def save_plots(plots, path_identifier='folder_path', prefix='plot'): folder = session[path_identifier] session['plots'] = [] names = session['results'][0][1:] for i in range(len(plots)): path = util.join_paths(folder, f'{prefix}-{names[i]}.png') session['plots'].append(path) plots[i].savefig(path)
def __init__(self, ydata, dstpath, targetengine): self.ydata = ydata self.targetengine = targetengine self.name = self.ydata.name self.dir = util.join_paths(dstpath, util.check_filename(self.name)) self.dir = util.check_duplicate(self.dir) # progress dialog data self.message = "" self.curnum = 0 self.maxnum = 1 self.maxnum += len(ydata.storehouse) self.maxnum += len(ydata.standbys) self.maxnum += len(ydata.partys) * 2 self.maxnum += len(ydata.album) # エラーログ self.errorlog = ""
def forecast_from_csv(csv_filename, folder_path, prefix='static/'): column_names, columns = all_but_first_columns_and_names_from_csv( csv_filename) results = forecast(columns) results_matrix = format_forecasting_results(column_names, results) real = [column[len(column) - 1] for column in columns] if folder_path: plots = [] for i in range(len(columns)): path = join_paths(folder_path, f'plot-{column_names[i].replace(" ", "")}.png') columns[i].plot().get_figure().savefig(path) relative_path = path[path.find(prefix) + len(prefix):] plots.append((relative_path, column_names[i])) plt.clf() else: plots = None return results_matrix, error(real, column_names, results), plots
def csv_path(index, path_identifier='folder_path', prefix='data'): return util.join_paths(session[path_identifier], f'{prefix}-{index}.csv')
def convert(self): if not self.datalist: self.load() self.curnum_n = 0 self.curnum = 50 # 宿データをxmlに変換 if not os.path.isdir(self.dir): os.makedirs(self.dir) yadodb = cw.yadodb.YadoDB(self.dir) for data in self.datalist: data.yadodb = yadodb self.message = u"%s を変換中..." % (os.path.basename(data.fpath)) self.curnum_n += 1 self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum) try: fpath = data.create_xml(self.dir) if isinstance(data, party.Party) and\ self.wyd.partyname == cw.util.splitext(os.path.basename(data.fpath))[0]: fpath = cw.util.relpath(fpath, self.dir) fpath = cw.util.join_paths(fpath) self.wyd.cwpypartyname = fpath if hasattr(data, "errorcards"): for errcard in data.errorcards: s = errcard.fname s = u"%s は読込できませんでした。\n" % (s) self.write_errorlog(s) except Exception: cw.util.print_ex() s = os.path.basename(data.fpath) s = u"%s は変換できませんでした。\n" % (s) self.write_errorlog(s) # 冒険中情報を変換 for partyinfo, partymembers in self.nowadventuringparties: self.message = u"%s の冒険中情報を変換中..." % (partyinfo.name) self.curnum_n += 1 self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum) try: self.create_log(partyinfo, partymembers) except Exception: cw.util.print_ex() s = partyinfo.name s = u"%s の冒険中情報は変換できませんでした。\n" % (s) self.write_errorlog(s) yadodb.commit() yadodb.close() # その他のファイルを宿ディレクトリにコピー for path in self.otherfiles: self.message = u"%s をコピー中..." % (os.path.basename(path)) self.curnum_n += 1 self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum) dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copy2(path, dst) if not os.access(dst, os.R_OK | os.W_OK | os.X_OK): os.chmod(dst, stat.S_IWRITE | stat.S_IREAD) # ディレクトリを宿ディレクトリにコピー for path in self.otherdirs: self.message = u"%s をコピー中..." % (os.path.basename(path)) self.curnum_n += 1 self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum) dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copytree(path, dst) if not os.access(dst, os.R_OK | os.W_OK | os.X_OK): os.chmod(dst, stat.S_IWRITE | stat.S_IREAD) # 存在しないディレクトリを作成 dnames = ("Adventurer", "Album", "BeastCard", "ItemCard", "SkillCard", "Party") for dname in dnames: path = util.join_paths(self.dir, dname) if not os.path.isdir(path): os.makedirs(path) self.curnum = 100 return self.dir
def create_fpath(name, ext): fpath = util.join_paths(self.dir, util.check_filename(name) + ext) fpath = util.check_duplicate(fpath) return fpath
def __init__(self, path, dstdir, skintype, materialdir="Material", image_export=True): """カードワースのシナリオを読み込み、XMLファイルに変換するクラス。 path: カードワースシナリオフォルダのパス。 dstdir: 変換先ディレクトリ。 skintype: スキンタイプ。 """ self.name = os.path.basename(path) self.path = path self.dir = util.join_paths(dstdir, os.path.basename(self.path)) self.dir = util.check_duplicate(self.dir) self.skintype = skintype self.materialdir = materialdir self.image_export = image_export # progress dialog data self.message = "" self.curnum = 0 self.maxnum = 1 # 読み込んだデータリスト self.datalist = [] # エラーログ self.errorlog = "" # pathにあるファイル・ディレクトリを # (シナリオファイル,素材ファイル,その他ファイル, ディレクトリ)に分ける。 exts_mat = set([ "bmp", "jpg", "jpeg", "wav", "wave", "mid", "midi", "jpdc", "jpy1", "jptx" ]) self.cwfiles = [] self.materials = [] self.otherfiles = [] self.otherdirs = [] self.summarypath = None # 互換性マーク self.versionhint = None self.hasmodeini = False if self.path == "": return for name in os.listdir(self.path): path = util.join_paths(self.path, name) if os.path.isfile(path): ext = cw.util.splitext(name)[1].lstrip(".").lower() if name.lower() == "summary.wsm" and not self.summarypath: self.summarypath = path self.cwfiles.append(path) elif ext == "wid": self.cwfiles.append(path) elif ext in exts_mat: self.materials.append(path) elif name.lower() == "mode.ini": self.read_modeini(path) else: self.otherfiles.append(path) else: self.otherdirs.append(path) if self.summarypath: self.versionhint = cw.cwpy.sct.merge_versionhints( self.versionhint, cw.cwpy.sct.get_versionhint(fpath=self.summarypath))
def join_paths(self, tolerance=0.05): return Drawing(util.join_paths(self.paths, tolerance))