pythonでは、文字列の中に置換対象の埋め込むことができます。
いくつか方法がありますが、一例としては以下のような感じ。
python
1items = {"name": "悟空", "age": 3}
2
3template = '''
4こんにちは。 名前は{name}。
5今{age}歳です。
6'''
7
8print(template.format(**items))
これを実行すると、以下の出力になります。
text
1こんにちは。 名前は悟空。
2今3歳です。
テンプレートは'''
でくくると、複数行の文字列が表しやすくなります。
itemsにあたるデータはcsvから読んでくることになりますが、csv.DictReaderを使えば、列ごとにカラム名をキーとしたdictが得られるのでそのまま使えます。
pandasを使ってもできるでしょう。
もっと込み入ったテンプレートを利用したいのであれば、jinja2あたりを使うと、繰り返しや条件分岐なども表現できますが、今回はそこまで必要ではなさそうですね。
だいぶ進みましたね。
質問のコードはまだ途中で、もうひといきです。
参考にされたサイトのここにある説明のデータ抽出方法のところの処理までやらないと、データが出てきません。
まずは、今回のテンプレートへの差し込みでは、辞書形式でデータを取り出すので、リスト形式は不要です。
python
1import csv
2
3csv_file = open("meisai_data.csv", "r", encoding="utf-8", errors="", newline="" )
4#辞書形式
5f = csv.DictReader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)
いろいろオプションが付いていますが、出力結果が適当でない場合はここを調整する必要があるかもしれません。 まずは何もつけないでやってもいいかもしれませんね。
ポイントはこの「f」がリーダーなので、for文で回すと1行ずつ取りだすことができるってところです
まずは、内容がちゃんととりだせるかどうか確認します。
python
1for items in f:
2 print(items)
こうすると、csvの内容が、辞書形式で表示されるのがわかると思います。
辞書形式で19個の項目がでてきていればいいでしょう。 こまかいところまで確認できればなおよいです。
問題なければ、差し込んでみます。
できあがるコードはこんな観じでしょうね。
python
1import csv
2
3csv_file = open("meisai_data.csv", "r", encoding="utf-8", errors="", newline="" )
4#辞書形式
5f = csv.DictReader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)
6
7template = '''
8こんにちは。 名前は{姓}。
9今{名}歳です。
10'''
11
12for items in f:
13 print(template.format(**items)
14
15csv_file.close()
うまくいったでしょうか?。 余計な「"」とかが入っているかもしれません。そういう場合はDictReaderのパラメータを調整するといいかもしれません。
ファイルへの出力については、web上にたくさんの情報がありますから、それを参考にしてつくってみるのがいいと思います。
慣れればなんということはありませんが、ファイルへの書き込みも、 ファイル名の生成もそれほど簡単ではありません。
きっかけとして、手順を書くと
- for文の中で実施
- ファイル名を生成する
csvに姓と名が入っているのであれば、 filename = '{姓}_{名}様.txt'.format(**items)
で作れるでしょう。
- ファイルを書き込み権限でopenする
withを使うと便利
- 開いたファイルに文字列 を書き込み。
こんな感じでしょう。