我是python的新手,这就是我想要实现的目标。我试图将python创建的列表导出为csv文件,但它似乎不起作用。
我期待看到的内容:
Name Address ID
A AA 01
B BB 05
.. .... ....
但不幸的是,这就是我的输出:
Name Address ID
['A', 'AA', '01']
['B', 'BB', '05']
换句话说,它将列表中一行的所有元素添加到输出CSV文件的第一列,而标题元素位于各自的列中。我希望在输出文件中填充各自标题下的条目。 如果我从csv文件中读取并写入一个文件,我没有遇到过这个问题。
以下是我的代码:
import csv
fOpen1=open('C:\master.csv')
fOpen2=open('C:\test.csv')
masterFile=csv.reader(fOpen1)
testFile=csv.reader(fOpen2)
outputFile=open('C:\Output.csv', 'wb')
CSVWriter=csv.writer(outputFile)
masterList=list()
testList=list()
header=testFile.next()
CSVWriter.writerow(header)
for row1 in masterFile:
if row1[0] not in masterList:
masterList.append(row1[0])
for row2 in testFile:
if row2[0] not in masterList:
testList.append(row2)
CSVWriter.writerows(zip(testList))
您认为我的代码出错了?任何帮助和建议将不胜感激。
答案 0 :(得分:1)
问题在于你在做什么 -
CSVWriter.writerows(zip(testList))
这会导致传递给writerows()
的列表中的每个元素都是一个元素,其中包含一个元素,即列表(您可以看到输出到csv)。示例 -
>>> l = [[1,2,3,4],[4,5,6,7],[5,5,5,5]]
>>> list(zip(l))
[([1, 2, 3, 4],), ([4, 5, 6, 7],), ([5, 5, 5, 5],)]
如果您想直接在testList中编写行,则应该执行 -
CSVWriter.writerows(testList)
如果要转置testList,以便行成为列,列成为行,则应在发送到zip()
时解压缩 -
CSVWriter.writerows(zip(*testList))