プロが教えるわが家の防犯対策術!

すいません質問があります。

pythonでリストをCSVに出力する際に、インデックスごとに改行したいです。

下記のPythonのコードを実行すると、
CSV内で、

abc,def と A1, A2に配置されてしまいます。
しかし、今回やりたいのは、
abc
def

とすることです。
そのやり方をぜひとも教えてほしいです。

import csv

csvlist = ["abc","def"]

f = open("output.csv", "w")
writecsv = csv.writer(f, lineterminator='\n')

writecsv.writerow(csvlist)

f.close()

お手数をおかけしますがよろしくお願いいたします。

質問者からの補足コメント

  • 失礼しました。
    下記修正させていただきます。

    間違い:abc,def と A1, A2に配置されてしまいます。
    正しい:abc,def と A1, B1に配置されてしまいます。

    しかし、今回やりたいのは、
    abc
    def

    とA1, A2することです。

      補足日時:2019/11/24 01:12
  • めぐみん_ さん

    ありがとうございます!

    あと1つだけ質問させてください。

    a,b,c
    d,e,f

    こちらを

    abc
    def

    とする方法があったりしますかね・・・・?
    カンマで1文字ずつ区切らず、かつ、改行させたく・・・

    お手数をおかけしますがよろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/11/24 08:41

A 回答 (5件)

#1の方法は


for x in csvlist:write:
で リストの1要素を取り出し
csv.writerow(x)
でcsvとして書き込んでいます。

このとき、 x は csvlistの1要素なので「文字列」です。
文字列は「1文字ずつが並んだシーケンシャル」として解釈されます。
csvwriter.writerowメソッドは、「シーケシャルデータを受け取って、その各要素をdelimiterで指定した文字で区切って出力する」というものです。
つまり、 csv.writerow(x) では「 xの文字列を1文字ずつカンマに区切って出力」することになります。

出力したいのは x そのものなのですから、writerowには「 要素が x 一つだけのシーケンシャル」を指定する必要があります。
例えば csv.writerow( (x,) ) とタプルにする、等。

で、そんな面倒なことするよりは、f.writeメソッドを使って f.write(x + '\n') とでもした方がいいのではないでしょうか。
csvモジュールを使う必要はありません。
    • good
    • 1
この回答へのお礼

ありがとうございました! 大変勉強になりました。おっしゃる通りのやり方でできました。

お礼日時:2019/11/25 00:51

No.1へのお礼に対して。



CSVへの書き込みである以上、リスト内の物には自動でカンマ区切りになるようです。
なのでちょっと戸惑い中。
    • good
    • 0
この回答へのお礼

ありがとうございました! 大変助かりました。

お礼日時:2019/11/25 00:52

https://docs.python.org/ja/3/library/csv.html#di …

lineterminator は改行コードを指定するもので、 カンマを改行に変更すうものではありません。
区切りを変えるのは delimiter です。


ただ、リストの内容を改行して出力したい、というだけならcsvモジュールを使う必要は無く、
・for で 1つずつ 改行付けて出力
https://docs.python.org/ja/3/library/stdtypes.ht … を使って改行で連結して出力
でいいのでは?
    • good
    • 0

No.1です。



その回答は無視してください。
    • good
    • 0

それこそリストの中身をインデックス毎に分割してませんしね。


なのでそのようにリストの値が一回で書き出されるのでしょう。

import csv

csvlist = ["abc","def"]

f = open("output.csv", "w")
writecsv = csv.writer(f, lineterminator='\n')

for x in csvlist:writecsv.writerow(x) #ここでリストを要素毎に分割して書き込みをする。

f.close()

結果:

a,b,c
d,e,f
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!