【问题标题】:Use Python CSV module to write to csv keeping the columns in the same order each time使用 Python CSV 模块写入 csv,每次保持列的顺序相同
【发布时间】:2017-12-04 00:33:58
【问题描述】:

下面是获取字典列表并将它们写入 CSV 文件的代码。

import csv

def createBaselineCSV(baselineDictionaryList, name):

    toCSV = baselineDictionaryList

    keys = toCSV[0].keys()
    print(keys)
    with open(name, 'w') as output_file:
        dict_writer = csv.DictWriter(output_file, fieldnames=keys)
        dict_writer.writeheader()
        dict_writer.writerows(toCSV)

contacts = [{'Name':'John Smith', 'Email':'example@email.com', 'Phone':'888-888-8888'}, {'Name':'Keith Stone', 'Email':'keith@coors.com', 'Phone':'000-000-000'}]

createBaselineCSV(contacts, 'contacts.csv')

但是,每次创建新的电子表格时,创建的 CSV 文件的列格式并不保持一致。所以有一次它可能会创建一个如下所示的 CSV:

Name, Email, Phone
John Smith, example@email.com, 888-888-8888
Keith Stone, keith@coors.com, 000-000-0000

下次它可能会生成如下所示的 CSV:

Email, Phone, Name
example@email.com, 888-888-8888, John Smith
keith@coors.com, 000-000-0000, Keith Stone

有没有一种好方法可以确保每次创建 CSV 时列单元格都位于固定位置?例如,A 列始终为“姓名”,B 列始终为“电子邮件”,C 列始终为“电话”。

我猜想完成这将意味着在字典列表以外的不同数据类型上调用 createBaselineCSV(因为字典不保持指定的顺序),而不是在函数中重新格式化代码。最好的方法是什么?

【问题讨论】:

  • 不要使用 DictWriter,或者如果必须使用 collections.OrderedDict。字典本质上不是有序的:这很重要。

标签: python csv export-to-csv


【解决方案1】:

您的问题是fieldnames=keys 其中keys 来自没有顺序的字典。只需设置fieldnames=['Name', 'Email', 'Phone'] 或任何你想要的。您可以继续使用 dicts 和 DictWriter

【讨论】:

  • 或使用 OrderedDict
【解决方案2】:

pandas 让这一切变得非常简单:

import pandas as pd

contacts = [{'Name':'John Smith', 'Email':'example@email.com', 'Phone':'888-888-8888'}, {'Name':'Keith Stone', 'Email':'keith@coors.com', 'Phone':'000-000-000'}]
df = pd.DataFrame(contacts)
df[['Name', 'Email', 'Phone']].to_csv('contacts.csv', index=False)

【讨论】:

    猜你喜欢
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 2014-02-11
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多