見出し画像

【仕事/プログラミング/メモ】pythonで二次配列をcsvに書き出す

自分用メモ。

二次配列のCSV書き出しは、若干の記述の違いで配列が崩れてしまうことがある。
妙な癖があるので、正直ちょっと苦手。

基本的にはwriterowsを使用するが、これはデータをメモリに保持してしまう。
重いデータの場合はメモリ不足に陥る可能性があるので、その場合はwriterowにて1行ずつ書き出し。

writerowとwriterowsの記述自体が、「s」しか違いがないため見間違えも発生しやすい。
これに限らず、単数形、複数形の確認は常に念頭に置いておく。

writerows

wirterowsは、メモリに保持した二次配列を一気に出力する

import csv

lists = [
    ["A", "B", "C"],
    ["D", "E", "F"]
]

print(lists)
# [['A', 'B', 'C'], ['D', 'E', 'F']]

with open("test.csv", "w", encoding="utf_8", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(lists)

Writerrow

writerowは二次配列をforで回し、一行ずつ出力していく

import csv

lists = [
    ["A", "B", "C"],
    ["D", "E", "F"]
]

print(lists)
# [['A', 'B', 'C'], ['D', 'E', 'F']]

with open("test.csv", "w", encoding="utf_8", newline="") as f:
    writer = csv.writer(f)
    for list in lists:
        writer.writerow(list)

改行コード

元々使っていたコードでは、「newline = ""」の箇所を「lineterminator='\n'」と記述していた。
問題なくCSVを書き出していた気がするのだが、コピーして持ってきたプログラムで使用すると出力CSV内の配列が崩れてしまった。
具体的には、改行コードであるはずの'\n'がそのまま文字列として出力されてしまい、配列が改行されていなかった
私の勘違いなのか、何かコードの別の箇所を触ってしまったのかわからないが、ひとまず前述の方法で安定したのでしばらくはこれでいこうと思う。
気が向いた時に原因は追究するとしよう。

原因候補:入力に使用したCSVの配列の区切り文字??

#印備忘録

この記事が気に入ったらサポートをしてみませんか?