需要通过python输出csv的帮助

时间:2016-02-28 14:39:18

标签: python list csv dictionary

好的,我有3个数据列表。每个都有不同的长度,彼此之间没有相关性。

我遇到的问题是,当我去写bList时,它会在aList完成后写入行。所以他们都在正确的列中,这是花花公子,但我只想让每一列从第2行开始(第1行是为标题保留的)。相反,我在第1行开始一个列表,在第28行结束,然后bList从29开始,等等。

这是我所拥有的,我希望你们中的一个好巫师会解释如何修复它。我理解导致问题的是什么,我只是不知道如何修复它。

def write_output(file):
    f = open(file, 'w')
    fields = ('a', 'b', 'c')
    wr = csv.DictWriter(f, delimiter=",", fieldnames=fields, lineterminator = '\n')

    wr.writeheader()
    for row in aList:
        wr.writerow({'a':row})
    for row in bList:
        wr.writerow({'b':row})
    for row in cList:
        wr.writerow({'c':row})

2 个答案:

答案 0 :(得分:1)

使用zip_longest。

示例,如果您的列表不包含None值:

from itertools import zip_longest

for a_b_c in zip_longest(aList, bList, cList):
    row = {k: v for k, v in zip(fields, a_b_c) if v is not None}
    wr.writerow(row)

答案 1 :(得分:0)

这是一个功能齐全的例子。

此脚本不使用任何库并在Python 2.7中运行。您可以通过确保每个值都以逗号分隔来创建CSV(逗号分隔值)文件。另外,我使用itertools函数而不是map

# Python 2.7    
# Here is an example of three lists of different lengths
aList = [9,8,2,5,14,6]
bList = [8,7,5,4]
cList = [9,15,25,60,47,88,3]

# Creates your empty CSV file
output_file = open(r'C:\Temp\output.csv', 'w')

# Adds headers in the first row
output_file.write('aList,bList,cList\n')

# Adds all the elements from the lists, row-by-row
for a, b, c in map(None, aList, bList, cList):
    output_file.write('%s,%s,%s\n' % (a, b, c))

# Closes your file
output_file.close()

Python 3中,map函数不再支持None作为映射函数。在这种情况下,zip_longest库中的itertools函数可能是最干净的方法(请注意,在Python 2.7中,来自itertools的此函数称为izip_longest

# Python 3.x
import itertools

# Here is an example of three lists of different lengths
aList = [9,8,2,5,14,6]
bList = [8,7,5,4]
cList = [9,15,25,60,47,88,3]

# Creates your empty CSV file
output_file = open(r'C:\Temp\output.csv', 'w')

# Adds headers in the first row
output_file.write('aList,bList,cList\n')

# Adds all the elements from the lists, row-by-row
for a, b, c in itertools.zip_longest(aList, bList, cList):
    output_file.write('%s,%s,%s\n' % (a, b, c))

# Closes your file
output_file.close()