nemonein
nemonein

Reputation: 41

Print list to csv file in Python3

I have a list like this.

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

I want to print out to a csv file, something like this.

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

It has two fileds which are separted by semicolon. (not by a comma)

I used csv module, like this.

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

The result is..

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

Should I modify the list? Somewhat like this? [['C',';', 'C', 'E', 'G'],.......]

or any other brilliant ideas do you guys have?

Thanks in advance.

Upvotes: 0

Views: 6159

Answers (2)

erlc
erlc

Reputation: 680

I think it's easier to do it without the csv module:

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

Upvotes: 2

mata
mata

Reputation: 69042

You're writing four columns, not two, if you want the last list elements be one single column, you need to join them first manually.

And you need to change the delimiter if you want the csv semicolon separated, not the quote character:

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()

Upvotes: 2

Related Questions