web-dev-qa-db-ja.com

Python、リストの転置とCSVファイルへの書き込み

pythonを使用してcsvファイルに書き込む必要があり、各イテレータ項目は新しい行で開始する必要があります。したがって、使用している区切り文字は「\ n」です。各リストが書き込まれた後、次のリスト次のセルから書き込む必要があります。以下のように:

 lol = [[1,2,3],[4,5,6]]

Csvは次のようになります。

1 4
2 5
3 6

私が試したこと:

file = open("test.csv", "wb")
fileWriter = csv.writer(file , delimiter='\n',quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamWriter.writerow([1,2,3])
spamWriter = csv.writer(file , delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamWriter.writerow([4,5,6])
file.close()

以下のような結果になります。

 1
 2
 3
 4 5 6

Csvモジュールを使用して、次のような出力を取得するにはどうすればよいですか。

 1 4 
 2 5
 3 6

ここでのスペースは、csvファイル内のコンマを意味します。

ありがとう。

15
user1289853

Zipを使用せずに、次のことができます。

import csv

lol = [[1,2,3],[4,5,6],[7,8,9]]
item_length = len(lol[0])

with open('test.csv', 'wb') as test_file:
  file_writer = csv.writer(test_file)
  for i in range(item_length):
    file_writer.writerow([x[i] for x in lol])

これはtest.csvに出力されます:

1,4,7
2,5,8
3,6,9
13
redcurry

まず、Zip()を使用して入力を転置します

>>> Zip(*lol)
[(1, 4), (2, 5), (3, 6)]

その後、それをcsw.writerに渡します。例:.

with open("test.csv", "wb") as f:
    fileWriter = csv.writer(f, delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for row in Zip(*lol):
        fileWriter.writerow(row)

...結果:

$ cat test.csv 
1,4
2,5
3,6
9
Kimvais

Python3を使用している場合は、テキスト形式の「wt」でファイルを開く必要があります。csvにはwriterowsがあり、すべてを一度に書き込むことができます。ここに例があります:

data=[("test", "value1", "value2"), ("test2", "value3", "value4")]
with open('my.csv','wt') as out:
   csv_out=csv.writer(out)
   csv_out.writerows(data)

質問がリストを変換する方法を尋ねていることに気づきました。これは別のステップであり、これが私がそれを行う方法です。

lol = [[1,2,3],[4,5,6]]
data = Zip(lol[0],lol[1])
3
Piotr Czapla