Python 格式化从字典生成的csv行

Python 格式化从字典生成的csv行,python,csv,dictionary,export-to-csv,Python,Csv,Dictionary,Export To Csv,我写的是在csv中添加新的词典条目。这完全可以,但是格式很时髦。我正在记录我的自动策略所做的交易。它记录时间戳、交易和价格 以下是我的函数,用于记录新的词典条目并将其附加到我的csv: def record_example(x): now = datetime.now() unix = int(mktime(now.timetuple())) price = 8110 log.example[unix] = [unix, x, price] with

我写的是在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在A1中,买在A2中,8110在A3中


我已尝试为csv中的每一行“”加入(拆分(“,”),但仍会收到错误消息。。如果您能提供帮助,非常感谢!

请查看其中的方言选项,该选项允许您为csv设置不同的约定,我猜您需要
QUOTE\u MINIMAL

此外,您正在向您的dictwriter写入一个键和一个列表。通常,dictwriter将每行获取一个字典,每个字段作为“fieldname”:fieldvalue对保存在字典中

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

log.example[unix] = {"unix":unix, "x":x, "price":price}

{"unix" : 1559052353, "x" : 'buy', "price" : 8110}
dictwriter将根据您首选的csv方言输出一行,其中包含3个字段,“unix”、“x”、“price”


目前,您正在给它一个带键的列表,因此它将该列表输出为“raw”,这意味着它将应用那些不需要的额外修饰“[”,“]”

您可能想要编写的:
writer.writerow(log.example[unix])
。这将完成您想要的操作。您也不需要使用
e.close()
,因为带有的
块会自动为您关闭文件。

使用您的代码,您会得到标题为
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])))
注意:使用
上下文管理器时,不需要调用
e.close()
您可能希望将
log.example[unix]
设置为dict,而不是list。
另外,也可以用不需要使用
e.close()
的其他内容替换标题中的x。with块会自动为您关闭文件。
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])))