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

Seb*_*ian 2 python mysql csv python-3.x

如何从 Python 字典列表中编写 CSV 文件,确保字典键始终按相同顺序排列?

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

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

Run Code Online (Sandbox Code Playgroud)

请注意,键(名称/城市)的顺序各不相同。

现在我想把它写到 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()
Run Code Online (Sandbox Code Playgroud)

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

如何更好地做到这一点,确保字典键始终处于相同的顺序?

任何提示都非常感谢!

jua*_*aga 5

使用一个csv.DictWriter. 在fieldnames将迫使顺序。

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)
Run Code Online (Sandbox Code Playgroud)

这是生成的csv:

"1","Peter","London"
"2","Paul","Boston"
"3","Mary","Paris"
Run Code Online (Sandbox Code Playgroud)