python - 当键/值的顺序不同时,如何将 Python 字典写入 CSV?

标签 python mysql python-3.x csv

如何从 Python 字典列表写入 CSV 文件,确保字典键始终保持相同的顺序?

具体来说,我有一个 Python 字典列表(来自 JSON API),如下所示:

[
    {
        "id": 1,
        "name": "Peter",
        "city": "London"
    },
    {
        "id": 2,
        "city": "Boston",
        "name": "Paul"
        
    },
    {
        "id": 3,
        "name": "Mary",
        "city": "Paris"
    }
]

请注意,按键的顺序(名称/城市)有所不同。

现在我想将其写入 MySQL。我目前所做的是将所有内容写入 CSV 文件,然后使用 LOAD DATA INFILE 将此文件加载到 MySQL 中。

我通过循环遍历列表中的所有元素并将值写入 CSV 文件来编写 CSV 文件:

def write_csv_file(filename, resp):

    csvFile = open(filename, "w", newline='', encoding='utf-8')
    csvWriter = csv.writer(csvFile, delimiter=',', quoting=csv.QUOTE_ALL)

    for element in resp:
       csvWriter.writerow(element.values())

    csvFile.close()

但这会导致 CSV 文件每行具有不同的值,具体取决于数据在字典中的位置。

如何才能做得更好,确保字典键始终保持相同的顺序?

非常感谢任何提示!

最佳答案

使用csv.DictWriterfieldnames 将强制执行顺序。

import csv
data = [
    {
        "id": 1,
        "name": "Peter",
        "city": "London"
    },
    {
        "id": 2,
        "city": "Boston",
        "name": "Paul"

    },
    {
        "id": 3,
        "name": "Mary",
        "city": "Paris"
    }
]
with open('test.csv', "w", newline='', encoding='utf-8') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=["id", "name", "city"], delimiter=',', quoting=csv.QUOTE_ALL)
    writer.writerows(data)

这是生成的 csv:

"1","Peter","London"
"2","Paul","Boston"
"3","Mary","Paris"

关于python - 当键/值的顺序不同时,如何将 Python 字典写入 CSV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64723499/

相关文章:

mysql - 正则表达式匹配 MySQL 时间戳格式 "Y-M-D H:M:S"

Python绑定(bind)C++虚成员函数无法调用

python - 为所有非递减序列的列表开发索引方案

python - 迁移到 Python 2.6.x

python - Azure QueueClient Python 无法使用 DefaultAzureCredential

python - 原始 : How to postprocess raw images WITHOUT adulterating pixel data?

python - 将大型 CSV 文件加载到 Oracle 表的技术选择

php - 分解并在行中搜索

Mysql 不同列中的 Union

python - 手动投影坐标类似于python中的gluLookAt