import pandas as pd import tempfile import os ##### 関数定義 ##### # 問題IDから選択肢IDを作成 def create_choice_id(question_id, num): return str(question_id) + 'CH00' + str(num) # 問題IDから正解IDを作成 def create_correct_id(question_id, num): return str(question_id) + 'A00' + str(num) # 最終FMTを作成 def convert_last_fmt_question(csv_file): input = pd.read_csv(csv_file.name) # 問題マスタの作成 output_question = pd.DataFrame({'問題ID': [], '知識ID': [], '出題形式ID': [], 'リード文':[],'問題': [ ], '問題_翻訳': [], '正解文': [], '品詞': [], '解説テキスト': [],'リスト表示':[]}) # 問題マスタに行を追加 for index, row in input.iterrows(): new_row = pd.DataFrame({'問題ID': [row['問題ID']], '知識ID': [row['知識ID']], '出題形式ID': [row['出題形式ID']], 'リード文':[row['リード文']],'問題': [ row['問題']], '問題_翻訳': [row["問題_翻訳"]], '正解文': [row['正解文']], '品詞': [""], '解説テキスト': [row["解説テキスト"]],"リスト表示":[row["リスト表示"]]}) output_question = pd.concat([output_question, new_row], ignore_index=True) # 問題IDの昇順で並び替え output_question.sort_values(by='問題ID', ascending=True, inplace=True) # 問題マスタをCSVファイルに出力 with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp: output_question.to_csv(tmp.name, index=False, encoding='cp932', errors='ignore') output_path = tmp.name # ファイル名を変更 new_path = os.path.join(os.path.dirname(output_path), "question.csv") os.rename(output_path, new_path) return new_path def convert_last_fmt_selection(csv_file): input = pd.read_csv(csv_file.name) # 選択肢マスタの作成 output_choice = pd.DataFrame({'選択肢ID': [], '問題ID': [], '選択肢': [], '表示順': []}) # 選択肢マスタに行を追加 for index, row in input.iterrows(): # 選択肢配列を作成 selection = row["選択肢"].split("/") # 選択肢配列から選択肢を取り出し、行を追加 for i in range(len(selection)): new_row = pd.DataFrame({'選択肢ID': [create_choice_id( row['問題ID'], i+1)], '問題ID': [row['問題ID']], '選択肢': [selection[i]], '表示順': [i+1]}) output_choice = pd.concat([output_choice, new_row], ignore_index=True) # 選択肢IDの昇順で並び替え output_choice.sort_values(by='選択肢ID', ascending=True, inplace=True) # 選択肢マスタをCSVファイルに出力 with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp: output_choice.to_csv(tmp.name, index=False, encoding='cp932', errors='ignore') output_path = tmp.name # ファイル名を変更 new_path = os.path.join(os.path.dirname(output_path), "choices.csv") os.rename(output_path, new_path) return new_path def convert_last_fmt_correct(csv_file): input = pd.read_csv(csv_file.name) # 正解選択肢マスタの作成 output_correct_choice = pd.DataFrame( {'正解ID': [], '問題ID': [], '正解': [], '並び順': []}) # 正解選択肢マスタに行を追加 for index, row in input.iterrows(): # 正解の配列を作成 correct = row["正解"].split("/") # 正解の配列から正解を取り出し、行を追加 for i in range(len(correct)): new_row = pd.DataFrame({'正解ID': [create_correct_id( row['問題ID'], i+1)], '問題ID': [row['問題ID']], '正解': [correct[i]], '並び順': [i+1]}) output_correct_choice = pd.concat( [output_correct_choice, new_row], ignore_index=True) # 正解IDの昇順で並び替え output_correct_choice.sort_values(by='正解ID', ascending=True, inplace=True) # 選択肢マスタをCSVファイルに出力 with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp: output_correct_choice.to_csv(tmp.name, index=False, encoding='cp932', errors='ignore') output_path = tmp.name # ファイル名を変更 new_path = os.path.join(os.path.dirname(output_path), "correct.csv") os.rename(output_path, new_path) return new_path