少し悩んだので自分用メモ
辞書型(dictionary)のリスト
Pythonで辞書型のリストを扱うことがあると思います。
(少なくとも私はよく使っています)
こういうデータです。
[
[
{'No': 1, 'Name': 'Yamada Taro', 'LastLoginTime': '2021-03-16 15:44:16'},
{'No': 2, 'Name': 'Yamada Jiro', 'LastLoginTime': '2021-03-10 00:12:17'},
],
[
{'No': 3, 'Name': 'Yamada Saburo', 'LastLoginTime': '2021-03-20 12:01:02'},
],
[
{'No': 4, 'Name': 'Yamada Shiro', 'LastLoginTime': '2020-12-24 00:00:13'},
{'No': 5, 'Name': 'Yamada Goro', 'LastLoginTime': '2021-03-17 11:01:55'},
]
]
こういった形式のデータをCSV出力したくて色々と試行錯誤しました。
pythonの知識不足ですんなりとは出来なかったです。
itertools.chain.from_iterable()で辞書型のリストを整理
まずはitertools.chain.from_iterable()を使って全iterableの要素を返すイテレータを作成し、list化します。
dic_list = 辞書型のリストデータ
iterator_list = list(itertools.chain.from_iterable(dic_list))
[
{'No': 1, 'Name': 'Yamada Taro', 'LastLoginTime': '2021-03-16 15:44:16'},
{'No': 2, 'Name': 'Yamada Jiro', 'LastLoginTime': '2021-03-10 00:12:17'},
{'No': 3, 'Name': 'Yamada Saburo', 'LastLoginTime': '2021-03-20 12:01:02'},
{'No': 4, 'Name': 'Yamada Shiro', 'LastLoginTime': '2020-12-24 00:00:13'},
{'No': 5, 'Name': 'Yamada Goro', 'LastLoginTime': '2021-03-17 11:01:55'},
]
リストのリスト・・・となっていたデータが上記のように整理されます。
pandas.to_csv()でCSV出力
あとはみなさんお馴染みの方法でCSV出力します。
まずpandasのjson_normalizeで辞書のリストをDataFrameに変換します。
df = pandas.io.json.json_normalize(iterator_list)
No Name LastLoginTime
0 1 Yamada Taro 2021-03-16 15:44:16
1 2 Yamada Jiro 2021-03-10 00:12:17
2 3 Yamada Saburo 2021-03-20 12:01:02
3 4 Yamada Shiro 2020-12-24 00:00:13
4 5 Yamada Goro 2021-03-17 11:01:55
次にpandasのto_csv()でDataFrameをCSV出力します。
df.to_csv('data.csv', index=False, encoding='utf-8', quoting=csv.QUOTE_ALL)
今回はindexオプションをFalseにしてindexを非表示に、quotingオプションにダブルクオーテーションを指定しています。
下記がCSVの出力結果です。
"No","Name","LastLoginTime"
"1","Yamada Taro","2021-03-16 15:44:16"
"2","Yamada Jiro","2021-03-10 00:12:17"
"3","Yamada Saburo","2021-03-20 12:01:02"
"4","Yamada Shiro","2020-12-24 00:00:13"
"5","Yamada Goro","2021-03-17 11:01:55"
まとめ
ソース全文
import itertools
import pandas
import csv
dic_list = [
[
{'No': 1, 'Name': 'Yamada Taro', 'LastLoginTime': '2021-03-16 15:44:16'},
],
[
{'No': 2, 'Name': 'Yamada Jiro', 'LastLoginTime': '2021-03-10 00:12:17'},
{'No': 3, 'Name': 'Yamada Saburo', 'LastLoginTime': '2021-03-20 12:01:02'},
],
[
{'No': 4, 'Name': 'Yamada Shiro', 'LastLoginTime': '2020-12-24 00:00:13'},
{'No': 5, 'Name': 'Yamada Goro', 'LastLoginTime': '2021-03-17 11:01:55'},
]
]
iterator_list = list(itertools.chain.from_iterable(dic_list))
df = pandas.io.json.json_normalize(iterator_list)
df.to_csv('data.csv', index=False, encoding='utf-8', quoting=csv.QUOTE_ALL)
出力結果CSV
"No","Name","LastLoginTime"
"1","Yamada Taro","2021-03-16 15:44:16"
"2","Yamada Jiro","2021-03-10 00:12:17"
"3","Yamada Saburo","2021-03-20 12:01:02"
"4","Yamada Shiro","2020-12-24 00:00:13"
"5","Yamada Goro","2021-03-17 11:01:55"
以上