【问题标题】:Write a list having string and dictionary to a csv file将具有字符串和字典的列表写入 csv 文件
【发布时间】:2017-01-26 05:39:04
【问题描述】:

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

这是我的代码 sn-p

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]

【问题讨论】:

  • 第二个元素是一个叫做Counter的东西……那是什么?
  • 你说for x in threads ...但你只显示一个列表。您显示的列表是否仅在外部列表中显示一项?
  • 计数器正在计算事件中标志的出现次数
  • 现在我正在处理一个列表,一旦我解决了如何完成这个问题,我将把它扩展到所有线程
  • 显示的输出基本上是数据在 csv 文件中的样子的快照,所以为了使其相似,我添加了很多空格

标签: python list csv dictionary


【解决方案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))

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 2023-04-10
    • 2019-09-17
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2016-10-26
    相关资源
    最近更新 更多