我有一个列表,在列表的第一个元素中有字符串,第二个元素中有一个字典,它有一些标志和相关的计数,如何在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]
答案 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))