You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将多层嵌套列表保存并读取到CSV文件?

处理多层嵌套列表的CSV读写问题

问题本质

CSV是原生二维表格格式,仅支持扁平的行列结构,直接用csv模块读写时,内层嵌套列表会被自动转为字符串,读取后无法还原原始嵌套结构。

可行解决方案

方法1:JSON序列化嵌套字段

将内层嵌套列表序列化为JSON字符串写入CSV,读取时反序列化还原,这是兼容性最强的方案。

写入代码:

import csv
import json

my_list = [
    [['Text 1', 'Text 2'], 0],
    [['Text 3'], 1],
    [['Text 4', 'Text 5', 'Text 6'], 2]
]

path = "nested_data.csv"

with open(path, 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    for row in my_list:
        # 对嵌套列表做JSON序列化
        writer.writerow([json.dumps(row[0]), row[1]])

读取代码:

import csv
import json

path = "nested_data.csv"

with open(path, newline='') as csvfile:
    reader = csv.reader(csvfile)
    my_list = []
    for row in reader:
        # 反序列化JSON字符串回列表,还原数值类型
        nested_list = json.loads(row[0])
        my_list.append([nested_list, int(row[1])])

print(my_list)
# 输出:[[['Text 1', 'Text 2'], 0], [['Text 3'], 1], [['Text 4', 'Text 5', 'Text 6'], 2]]

方法2:用ast.literal_eval解析字符串化列表

如果已经用常规方法生成了CSV(内层列表变为"['Text 1', 'Text 2']"这类字符串),可以用ast.literal_eval安全解析回列表,比原生eval更安全。

读取代码:

import csv
import ast

path = "nested_data.csv"

with open(path, newline='') as csvfile:
    reader = csv.reader(csvfile)
    my_list = []
    for row in reader:
        nested_list = ast.literal_eval(row[0])
        my_list.append([nested_list, int(row[1])])

print(my_list)

方法3:自定义分隔符展开嵌套列表

若希望CSV文件更易读,可将嵌套列表元素用自定义分隔符(如|)拼接成字符串,读取时拆分还原。

写入代码:

import csv

my_list = [
    [['Text 1', 'Text 2'], 0],
    [['Text 3'], 1],
    [['Text 4', 'Text 5', 'Text 6'], 2]
]

path = "nested_data.csv"

with open(path, 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    for row in my_list:
        joined_text = '|'.join(row[0])
        writer.writerow([joined_text, row[1]])

读取代码:

import csv

path = "nested_data.csv"

with open(path, newline='') as csvfile:
    reader = csv.reader(csvfile)
    my_list = []
    for row in reader:
        split_text = row[0].split('|')
        my_list.append([split_text, int(row[1])])

print(my_list)

方案选型建议

  • 复杂嵌套结构(多层嵌套、多类型数据):优先用JSON序列化,兼容性最佳。
  • 简单字符串嵌套列表:选择自定义分隔符,CSV文件可读性更强。
  • 已有常规方法生成的CSV:用ast.literal_eval快速修复结构。

内容的提问来源于stack exchange,提问作者Thornam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:15:44