将每个列表写为csv表中的列

时间:2014-01-09 14:16:47

标签: python csv writer

我有多个列表,每个列表包含我想填写csv表的字符串。我希望每个列表在其各自的列标题中是单独的数据列。标题行与outrow变量的顺序相同。使用下面的代码,它只是填充第一列,包含所有列表中的所有数据。

#outrow = (Layer,RasterCatalog,ShapeFile,Text,Terrain,GroupLayer,Locator,MapDocument,Toolbox,DbaseTable,RasterDataset)

#formats = (['Layer','RasterCatalog','ShapeFile','Text','Terrain','GroupLayer','Locator','MapDocument','Toolbox','DbaseTable','RasterDataset'])

# if I were to print(outrow), it would look like this:
   #(['H:\\Test\\Test_Data\\New Layer.lyr'], [], ['H:\\Test\\Test_Data\\New_Shapefile.dbf', 'H:\\Test\\Test_Data\\New_Shapefile.shp'], [], [], [], [], [], [], ['H:\\Test\\Test_Data\\New_dBASE_Table.dbf'], [])

def WriteCSVFile(csvFile,formats,outrow):

    ofile  = open(csvFile, "wb")        
    writer = csv.writer(ofile, delimiter=',')
    writer.writerow(formats) #making header here
    writer.writerows(outrow)
    ofile.close()

1 个答案:

答案 0 :(得分:2)

如果我理解正确,那么outrow是一个列表列表,其中每个列表包含一列,对吧?然后(假设它们的长度都相同),你可以简单地zip()

writer.writerows(zip(*outrow))

举例说明:

>>> outrow = [[1,2,3], [4,5,6], [7,8,9]]
>>> import csv
>>> import sys
>>> w = csv.writer(sys.stdout)
>>> w.writerows(zip(*outrow))
1,4,7
2,5,8
3,6,9

如果列的长度不同,请使用itertools module中的izip_longest()(如果您使用的是Python 3,请zip_longest()):

>>> import itertools
>>> outrow = (['H:\\Test\\Test_Data\\New Layer.lyr'], [], ['H:\\Test\\Test_Data\\New_Shapefile.dbf', 'H:\\Test\\Test_Data\\New_Shapefile.shp'], [], [], [], [], [], [], ['H:\\Test\\Test_Data\\New_dBASE_Table.dbf'], [])
>>> w.writerows(itertools.izip_longest(*outrow, fillvalue=""))
H:\Test\Test_Data\New Layer.lyr,,H:\Test\Test_Data\New_Shapefile.dbf,,,,,,,H:\Test\Test_Data\New_dBASE_Table.dbf,,,H:\Test\Test_Data\New_Shapefile.shp,,,,,,,,
相关问题