将包含字符串和字典的列表写入csv文件

时间:2017-01-26 05:39:04

标签: python list csv dictionary

我有一个列表,在列表的第一个元素中有字符串,第二个元素中有一个字典,它有一些标志和相关的计数,如何在python中将它写入csv文件?

列表如下

['(RenderThread)', 
  Counter({'flags=4': 752, 'flags=40': 299, 'flags=10004': 283,
           'flags=80': 203, 'flags=90002': 36, 'flags=10080': 31, 
           'flags=100': 23, 'flags=10040': 14, 'flags=10100': 9})]
<type 'list'>

我想要输出如下

RenderThread    flags=100   flags=10004 flags=10040 flags=10080 flags=10100 flags=4 flags=40    flags=80    flags=90002
                      23            283          14          31           9     752      299        203             36

这是我的代码段

with open(outputcsv,'wb') as outcsv:
    writer = csv.writer(outcsv,delimiter=',')
    for x in threads:
        writer.writerows([x.split(',')])
        w = csv.DictWriter(outcsv,data1)
        w.writerow(counter1)
        writer.writerows('\n')

其中data1 = [thr1,counter1]

1 个答案:

答案 0 :(得分:1)

我猜测你的数据是什么样的,但我认为你可以将列表中的两个项目组合成一个单独的dict,然后使用DictWriter来编写整个数据。有几个奇怪的地方,包括我猜测你的数据列表是什么样的,你想要逗号分隔符,即使你在输出中显示了一堆空格填充。工作示例可以帮助解决其中的一些问题。

import csv

# example input
data = ['(RenderThread)', {'flags=4': 752, 'flags=40': 299}]

# presumably its one of many in an outer list
threads = [data]

def render_thread_iter(threads):
    """Given an interator that emits [RenderThread, FlagsDict] lists,
    iterate dicts where render thread is added to flags dict.
    """
    for data in threads:
        d = {'RenderThread':data[0]}
        d.update(data[1])
        yield d

with open('output.csv','w', newline='') as outcsv:
    # create list of header fields
    fieldnames = ['RenderThread'] + sorted(threads[0][1].keys())
    writer = csv.DictWriter(outcsv, delimiter=',', fieldnames=fieldnames)
    # write rendered dicts
    writer.writeheader()
    writer.writerows(render_thread_iter(threads))