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

Python CSV读取问题:如何将读取到的字符串转为列表并访问元素

CSV读写嵌套列表的类型转换解决方案

问题根源

CSV是纯文本格式,csv.writer写入嵌套列表时,会把列表直接转成字符串形式(比如['a','b']变成"['a', 'b']"),读取后自然是字符串类型,没法直接按列表索引访问元素。

两种可行解决办法

办法1:用ast.literal_eval解析字符串

ast.literal_eval能安全把字符串形式的Python字面量(列表、字典这类)转回原对象,比eval安全,不会执行恶意代码。

修改后的完整代码:

import csv
import ast

# 写入数据
data = [['a', 'b'], 'c', 'd']
with open('a.csv', 'a', newline='', encoding='utf-8') as file:
    writer = csv.writer(file, delimiter=';')
    writer.writerow(data)

# 读取并转换类型
with open('a.csv', 'r', newline='', encoding='utf-8') as file:
    for row in csv.reader(file, delimiter=';'):
        # 将字符串转成列表
        nested_list = ast.literal_eval(row[0])
        print(type(nested_list))  # 输出 <class 'list'>
        print(nested_list[0])     # 输出 'a'

办法2:JSON序列化/反序列化

把嵌套列表转成JSON字符串写入,读取时再解析成列表,这种方式对复杂嵌套结构兼容性更好,尤其是包含特殊字符的情况。

代码示例:

import csv
import json

# 写入数据
data = [['a', 'b'], 'c', 'd']
# 把嵌套列表转成JSON字符串
data[0] = json.dumps(data[0])
with open('a.csv', 'a', newline='', encoding='utf-8') as file:
    writer = csv.writer(file, delimiter=';')
    writer.writerow(data)

# 读取并转换
with open('a.csv', 'r', newline='', encoding='utf-8') as file:
    for row in csv.reader(file, delimiter=';'):
        # 解析JSON字符串为列表
        nested_list = json.loads(row[0])
        print(type(nested_list))  # 输出 <class 'list'>
        print(nested_list[0])     # 输出 'a'

注意点

  • 优先用ast.literal_eval或JSON方法,别用eval()——如果CSV文件被篡改,eval()可能执行恶意代码,风险高。
  • 嵌套结构含特殊字符时,JSON方法更稳妥,因为JSON的字符串格式是标准的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:05:32