web-dev-qa-db-ja.com

Python csvの列にリストを書き込む

すべて同じ長さのリストが5つあり、CSVの5つの列に書き込みたいと思います。これまでのところ、私はこのコードで列に1つしか書くことができません:

with open('test.csv', 'wb') as f:
    writer = csv.writer(f)
    for val in test_list:
        writer.writerow([val])

別のforループを追加すると、そのリストが同じ列に書き込まれます。 5つの別々の列を取得する良い方法を知っている人はいますか?

31
Alex Chumbley

それらを行に変更します

rows = Zip(list1,list2,list3,list4,list5)

それからちょうど

import csv

with open(newfilePath, "w") as f:
    writer = csv.writer(f)
    for row in rows:
        writer.writerow(row)
38
Joran Beasley

次のコードは、csvの列にpythonリストを書き込みます

import csv
from itertools import Zip_longest
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = ['f', 'g', 'i', 'j']
d = [list1, list2]
export_data = Zip_longest(*d, fillvalue = '')
with open('numbers.csv', 'w', encoding="ISO-8859-1", newline='') as myfile:
      wr = csv.writer(myfile)
      wr.writerow(("List1", "List2"))
      wr.writerows(export_data)
myfile.close()

出力は次のようになります

enter image description here

12

izip を使用してリストを結合し、それらを繰り返すことができます

for val in itertools.izip(l1,l2,l3,l4,l5):
    writer.writerow(val)
4
jh314
import csv
dic = {firstcol,secondcol} #dictionary
csv = open('result.csv', "w") 
for key in dic.keys():
    row ="\n"+ str(key) + "," + str(dic[key]) 
    csv.write(row)
0
Shb8086

サードパーティのライブラリを使用して満足している場合は、Pandasでこれを行うことができます。利点には、特殊なメソッドへのシームレスなアクセスと行/列のラベル付けが含まれます。

import pandas as pd

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

df = pd.DataFrame(list(Zip(*[list1, list2, list3]))).add_prefix('Col')

df.to_csv('file.csv', index=False)

print(df)

   Col0  Col1  Col2
0     1     4     7
1     2     5     8
2     3     6     9
0
jpp

私はcsv以外のものをインポートしたくありませんでした。すべてのリストには同じ数のアイテムがあります。ここでの一番の答えは、リストをそれぞれ1つの列ではなく、それぞれ1つの行にすることです。したがって、私はここで答えを取り、これを思いつきました:

import csv
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = ['f', 'g', 'i', 'j','k']
with open('C:/test/numbers.csv', 'wb+') as myfile:
    wr = csv.writer(myfile)
    wr.writerow(("list1", "list2"))
    rcount = 0
    for row in list1:
        wr.writerow((list1[rcount], list2[rcount]))
        rcount = rcount + 1
    myfile.close()
0
Bartats