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

如何将嵌套元组列表存入CSV并还原为原格式(无字符串化)

解决CSV读取后元组被字符串化的问题

这个问题很常见——CSV本质是纯文本格式,根本没有"元组"这种数据类型的概念,所以你用pandas保存的时候,它只能把元组转换成字符串形式写入文件,读取的时候自然就把这些字符串原封不动读回来了,不管用pandas还是原生csv模块都会遇到这个情况。

下面给你两种靠谱的解决思路:

方法一:用Pickle序列化(最简单,推荐)

如果不需要用Excel这类工具查看文件内容,直接用Python的pickle模块保存整个列表结构是最省心的,它能直接序列化Python对象,读取后完全还原原始结构:

保存代码:

import pickle

# 你的原始嵌套列表L
L = [[('a','b'), ('c','d')], [('e','f'), ('g','h')]]

with open('MyLists.pkl', 'wb') as f:
    pickle.dump(L, f)

读取代码:

import pickle

with open('MyLists.pkl', 'rb') as f:
    newList = pickle.load(f)

print(newList)
# 输出:[[('a', 'b'), ('c', 'd')], [('e', 'f'), ('g', 'h')]]

方法二:必须用CSV时,读取后转换字符串为元组

如果一定要用CSV(比如需要用文本编辑器或其他工具查看内容),可以用ast.literal_eval()把字符串形式的元组转换回真实元组——这个方法比直接用eval()安全得多,因为它只会解析合法的Python字面量(元组、列表、字符串等),不会执行恶意代码。

读取转换代码:

import pandas as pd
import ast

readdf = pd.read_csv('MyLists.csv', delimiter=";")
# 遍历每个子列表,把每个字符串元素转成元组,同时处理空值(CSV里的空单元格会变成NaN)
newList = []
for sublist in readdf.values.tolist():
    cleaned_sublist = []
    for item in sublist:
        if pd.notna(item):  # 跳过空值
            cleaned_sublist.append(ast.literal_eval(item))
    newList.append(cleaned_sublist)

print(newList)
# 输出:[[('a', 'b'), ('c', 'd')], [('e', 'f'), ('g', 'h')]]

为什么不用eval()?

举个例子,如果CSV里不小心混入了os.system('rm -rf /')这种字符串,eval()会直接执行它,而ast.literal_eval()会报错,不会执行危险代码,安全性拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:26:39