csvから入力データ作成
昨日のコメントによる擬似コードを実際のスクリプトで実装したものが以下になります。
# 1. csv からラベルと文字列データの組を作成し、入力データとする # file : 入力ファイル # lang : 採用する言語 # return 成功したら (label, string) のタプルのリスト. 失敗したら None. def input_from_csv(file,lang="日本語"): # csv ファイルを開く f=open(file) # if 失敗したら if f==None: # None を返す return None # 行のリストを作成する rows=[r for r in csv.reader(f)] # 1行目を取り出す r=rows.pop(0) # lang に対応する列を決める try: lang=r.index(lang) # if 決まらなかったら except ValueError: # None を返す return None if lang==0: return None # endif # 最終的なリストを作成する data=[(x[0], x[lang]) for x in rows] # リストを返す return data
言語の決定の部分がコメントと違ってますが、そもそもこのコメントの if は if 文というよりも
「もしも」という意味合いが強い(と思う)ので例外処理の形で実装しました。
あと、data=[(x[0], x[lang]) for x in rows]という部分で x の範囲のチェックをしていませんが
普通にツールから CSV を出力していたらこれで問題無いだろうと思います。
わざと破壊してあるデータだとどうなるか分かりません。 IndexError の例外処理をしたほうが
良いかもしれません。
この関数を以下のスクリプトで試してみました。
# テスト用 def print_data(lang): print "言語:"+lang data=input_from_csv("string_table.csv",lang) if data==None: print "データがありません" else: for d in data: print d[0], d[1] print "========" # 実行 if __name__=="__main__": print_data("ラベル") print_data("日本語") print_data("英語") print_data("フランス語")
言語:ラベル データがありません ======== 言語:日本語 STR_HELLO こんにちは。 STR_BYE さようなら。 ======== 言語:英語 STR_HELLO Hello. STR_BYE Good bye. ======== 言語:フランス語 データがありません ========