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
相关产品推荐
相关产品推荐

