我有多个列表,每个列表包含我想填写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()
答案 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,,,,,,,,