使用 Python CSV 模块写入 csv,每次保持列的顺序相同

Use Python CSV module to write to csv keeping the columns in the same order each time

下面是获取字典列表并将它们写入 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 列始终为 'Name',B 列始终为 'Email',C 列始终为 'Phone'.

我猜测完成此操作将意味着在不同于字典列表的不同数据类型上调用 createBaselineCSV(因为字典不维护指定的顺序),而不是在函数内重新格式化代码。什么是最好的方法?

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

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)