I am having trouble writing a list to a csv. My current code writes the list (comprised of strings) to the file with spaces between each character. This is what I'm working with, the problem is most likely in the last 3 or 4 lines:
import csv
import sys
import collections
c1 = set()
c2 = set()
c3 = set()
new=(r'file')
old=(r'file2')
with open(new, 'r') as newfile:
newreader = csv.reader(newfile, delimiter=(','))
for row in newreader:
c1.add(row[0])
with open(old, 'r') as oldfile:
oldreader = csv.reader(oldfile, delimiter=(','))
for row in oldreader:
c2.add(row[0])
c3=c2-c1
c1=c2|c3
print(c1)
print(c2)
print(c3)
with open (r'csv1.csv', 'w', newline='') as write_file:
write=csv.writer(write_file, delimiter=' ')
write.writerows(list(c1))
Thanks in advance for any help.
解决方案
writer.writerows() (plural, with s), takes a sequence of sequences; each nested sequence is a row with columns.
Your set on the other hand, is not such a nested structure. Produce one with a generator expression:
with open (r'csv1.csv', 'w', newline='') as write_file:
write=csv.writer(write_file)
write.writerows([r] for r in c1)
This produces lists with one column for each row. Since there is just the one column, it doesn't matter what you set the delimiter to.