【问题标题】:Formatting csv row made from dictionary格式化由字典制作的 csv 行
【发布时间】:2019-10-14 02:18:47
【问题描述】:

我正在编写将新字典条目附加到 csv 的内容。这工作得很好,但是格式很时髦。我正在记录我的自动策略所做的交易。它记录时间戳、交易和价格。

这是我的函数,它记录一个新的字典条目并附加到我的 csv:

def record_example(x):
    now = datetime.now()
    unix = int(mktime(now.timetuple()))
    price = 8110

    log.example[unix] = [unix, x, price]

    with open('example.csv', 'a') as e:
        writer = csv.DictWriter(e, fieldnames=log.example)
        writer.writerow(log.example)

        e.close()

我调用函数 w/:

record('buy')

这会创建应有的字典:

{1559052353: [1559052353, 'buy', 8110]}

然而,进入 csv 的条目现在看起来只填充了 A1:

"[1559052353, 'buy', 8110]"

当我试图让它看起来像:(以便我可以将 csv 导入另一个 .py 文件并绘制交易表现)

1559052353, buy, 8110

例如,1559052353 将在 A1 中,在 A2 中购买,8110 在 A3 中

我已经为 csv 中的每一行尝试了 ''.join(split(',') 但收到错误消息。如果您能提供帮助,非常感谢!

【问题讨论】:

  • 你不需要使用e.close()。 with 块会自动为您关闭文件。

标签: python csv dictionary export-to-csv


【解决方案1】:

使用您的代码,您会得到标题为 1559052353 并且值是整个列表(转换为 str,这就是为什么您也会得到双引号)

我相信你想要字段名unix,x,price 和值1559052353,buy,8110

with open('example.csv', 'a') as e:
    header = ['unix', 'x', 'price']
    writer = csv.DictWriter(e, fieldnames=header)
    writer.writeheader()
    writer.writerow(dict(zip(header, log.example[unix])))

注意当使用with 上下文管理器时,您不需要调用e.close() 你可能想让log.example[unix] 成为一个字典,而不是列表。 另外,也许用其他东西替换标题中的 x

【讨论】:

    【解决方案2】:

    您可能想写:writer.writerow(log.example[unix])。这会做你想做的事。您也不需要使用e.close(),因为with 块会自动为您关闭文件。

    【讨论】:

      【解决方案3】:

      查看csv.dictwriter 中的方言选项,这允许您为 csv 设置不同的约定,我猜你想要QUOTE_MINIMAL

      另外,你正在写一个键和一个列表给你的 dictwriter。通常,dictwriter 将每行取一个字典,每个字段作为“字段名”:字段值对保存在字典中。

      尝试转换您的输出例程,使其传递单独的行字典,例如:

      log.example[unix] = {"unix":unix, "x":x, "price":price}
      
      {"unix" : 1559052353, "x" : 'buy', "price" : 8110}
      

      dictwriter 将根据您首选的 csv 方言输出一行,其中包含 3 个字段,“unix”、“x”、“price”。

      就目前而言,您正在给它一个键控列表,因此它会输出该列表“原始”,这意味着它会应用那些不需要的额外装饰“[”、“]”

      【讨论】:

        猜你喜欢
        • 2016-12-06
        • 1970-01-01
        • 2018-03-07
        • 2021-08-06
        • 1970-01-01
        • 1970-01-01
        • 2011-02-14
        • 2017-10-01
        • 1970-01-01
        相关资源
        最近更新 更多