在Python3中将列表打印到csv文件

时间:2013-07-31 08:24:26

标签: csv python-3.x

我有一个这样的清单。

all_chords = [['C', 'C', 'E', 'G'],
 ['CM7', 'C', 'E', 'G', 'B'],
 ['C7', 'C', 'E', 'G', 'Bb'],
 ['Cm7', 'C', 'Eb', 'G', 'Bb'],
 ['Cm7b5', 'C', 'Eb', 'Gb', 'Bb'],
 ['Cdim7', 'C', 'Eb', 'Gb', 'Bbb(A)'],
 ['Caug7', 'C', 'E', 'G#', 'Bb'],
 ['C6', 'C', 'E', 'G', 'A'],
 ['Cm6', 'C', 'Eb', 'G', 'A'],
]

我想打印到csv文件,就像这样。

C_chords.csv

C;C,E,G
CM7;C,E,G,B
C7;C,E,G,Bb
Cm7;C,Eb,G,Bb
Cm7b5;C,Eb,Gb,Bb
Cdim7;C,Eb,Gb,Bbb(A)
Caug7;C,E,G#,Bb
C6;C,E,G,A
Cm6;C,Eb,G,A

它有两个以分号分隔的文件。 (不是逗号)

我使用了csv模块,就像这样。

myfile = open('C_chords.csv','w')
wr = csv.writer(myfile, quotechar=None)
wr.writerows(all_chords)
myfile.close()

结果是..

C,C,E,G
CM7,C,E,G,B
C7,C,E,G,Bb
Cm7,C,Eb,G,Bb
Cm7b5,C,Eb,Gb,Bb
Cdim7,C,Eb,Gb,Bbb(A)
Caug7,C,E,G#,Bb
C6,C,E,G,A
Cm6,C,Eb,G,A

我应该修改清单吗?有点像这样吗? [['C',';','C','E','G'],.......]

或者你们有其他任何好主意吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果您希望最后一个列表元素是一列,则需要编写四列而不是两列,您需要先手动连接它们。

如果你想要分隔csv分号而不是引号字符,你需要更改分隔符:

import csv

all_chords = [['C', 'C', 'E', 'G'],
 ['CM7', 'C', 'E', 'G', 'B'],
 ['C7', 'C', 'E', 'G', 'Bb'],
 ['Cm7', 'C', 'Eb', 'G', 'Bb'],
 ['Cm7b5', 'C', 'Eb', 'Gb', 'Bb'],
 ['Cdim7', 'C', 'Eb', 'Gb', 'Bbb(A)'],
 ['Caug7', 'C', 'E', 'G#', 'Bb'],
 ['C6', 'C', 'E', 'G', 'A'],
 ['Cm6', 'C', 'Eb', 'G', 'A'],
]

myfile = open('C_chords.csv','w')
wr = csv.writer(myfile, delimiter=';')
wr.writerows([c[0], ','.join(c[1:])] for c in all_chords)
myfile.close()

答案 1 :(得分:2)

我认为如果没有csv模块,这样做会更容易:

with open('C_chords.csv','w') as out_file:
  for row in all_chords:
    print('{};{}'.format(row[0], ','.join(row[1:])), file=out_file)