首页 > 解决方案 > 如何防止嵌套列表被 Python 的 csv.reader 解析为字符串?

问题描述

我有一个嵌套列表,如下所示:

[[['Mario', 100], ['Luigi', 100]], [['Donatello', 200]]]

我正在尝试将其保存到 CSV 文件中,如下所示:

import csv

with open('myfile.csv', 'w', newline='') as file:
    csv_writer = csv.writer(file, delimiter=';')

    for row in mylist:
        csv_writer.writerow(row)

然后我像这样读它:

with open('myfile.csv', 'r') as file:
    csv_reader = csv.reader(file, delimiter=';')

    for row in csv_reader:
        list_to_return.append(row)

return list_to_return

当我检查 myfile.csv 时,它看起来像这样:

['Mario', 100];['Luigi', 100]
['Donatello', 200]

但是,当我从 myfile.csv 读取时,列表如下所示:

[["['Mario', 100]", "['Luigi', 100]"], ["['Donatello', 200]"]]

换句话说,最里面的列表似乎被 CSV 阅读器解析为字符串,而不是列表。

我想知道你们中是否有人可以帮助我解决这个问题。为什么嵌套的 Python 列表会被 CSV 阅读器解析为字符串?

标签: pythoncsvnested-lists

解决方案


使用此处给出的 Numpy 代码:

import numpy as np

a = np.array([[['Mario', 100], ['Luigi', 100]], [['Donatello', 200]]])
print(a)

np.savez_compressed('myfile.npz', a=a)

arr_read = np.load('myfile.npz', allow_pickle=True)
arr_from_file = arr_read['a']
print(arr_from_file)

输出:

[list([['Mario', 100], ['Luigi', 100]]) list([['Donatello', 200]])]
[list([['Mario', 100], ['Luigi', 100]]) list([['Donatello', 200]])]

推荐阅读