0

我有一个这样的清单。

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'],.......]

或者你们有什么其他绝妙的想法吗?

提前致谢。

4

2 回答 2

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()
于 2013-07-31T08:34:11.360 回答
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)
于 2013-07-31T09:09:25.237 回答