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

セミコロンで区切られた 2 つのフィールドがあります。(カンマではありません)

このように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

最後のリスト要素を 1 つの列にしたい場合は、最初に手動で結合する必要があります。

また、引用符ではなく 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 に答える