導入
集めたデータは CSV(カンマ区切り)にすると、Excel や pandas でそのまま開けます。Python 標準の csv モジュールを使えば、区切りや引用符の扱いを安全に処理できます。
説明
手元の Python ではファイルに保存しますが、ここではブラウザなので、CSVの中身を文字列として組み立てて表示します(作り方はファイル保存と同じです)。
import csv
import io
products = [
{"name": "りんご", "price": 120},
{"name": "みかん", "price": 80},
]
buf = io.StringIO() # 文字列を貯める入れ物
writer = csv.DictWriter(buf, fieldnames=["name", "price"])
writer.writeheader() # 見出し行
writer.writerows(products) # データ行をまとめて書く
print(buf.getvalue())
csv.DictWriter(..., fieldnames=[...])… 辞書のリストを CSV にする書き込み役。列の順番をfieldnamesで決めます。writeheader()で見出し行、writerows(...)でデータ行を書きます。- 手元の Python では、
io.StringIO()の代わりにopen("out.csv", "w", newline="", encoding="utf-8")を渡せば、そのままファイルに保存されます。
実行結果:
name,price
りんご,120
みかん,80
やってみよう
products に {"name": "ぶどう", "price": 300} を足すと、CSVの行も1行増えます。csv モジュールを使うと、値にカンマが含まれても自動で引用符("...")で囲んでくれるので、自前で文字列連結するより安全です。
演習
fieldnames を ["price", "name"] に変えると、列の順番が入れ替わります。実際に順番を変えて print し、見出しとデータの両方が入れ替わることを確かめてください。
ヒント1を見る
csv.DictWriter(buf, fieldnames=["price", "name"]) にするだけで、出力の列順が変わります。