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

如何在Python中将含子列表的CSV文件读取为嵌套列表?

解决方法

你的问题出在两个地方:一是csv.reader会把每一行数据作为列表的一个元素,所以返回的data是二维列表(长度为1,data[0]才是该行的字段列表);二是默认的CSV解析会把[ghi,jkl]当成普通字符串,不会自动解析为子列表。要实现你的需求,需要自定义解析逻辑,区分括号内外的逗号分隔符,再将目标字段转换为子列表。

代码实现

def parse_custom_line(line):
    result = []
    current_field = []
    in_bracket = False
    
    # 遍历每个字符,区分括号内外的逗号
    for char in line.strip():
        if char == '[':
            in_bracket = True
            current_field.append(char)
        elif char == ']':
            in_bracket = False
            current_field.append(char)
        elif char == ',' and not in_bracket:
            # 括号外的逗号作为字段分隔符
            result.append(''.join(current_field).strip())
            current_field = []
        else:
            current_field.append(char)
    # 添加最后一个字段
    if current_field:
        result.append(''.join(current_field).strip())
    
    # 将带括号的字段转换为子列表
    for i in range(len(result)):
        field = result[i]
        if field.startswith('[') and field.endswith(']'):
            # 去掉首尾括号,按逗号分割后清理空格
            sub_items = [item.strip() for item in field[1:-1].split(',')]
            result[i] = sub_items
    return result

# 读取文件并解析
with open('file.csv', 'r') as f:
    line = f.readline()  # 假设文件只有一行数据
parsed_data = parse_custom_line(line)

# 测试输出
print(parsed_data)
print(parsed_data[2][0])  # 输出 ghi
print(parsed_data[2][1])  # 输出 jkl

代码说明

  1. 自定义字段分割:通过遍历字符,标记是否处于方括号内部,只有括号外的逗号才作为字段分隔符,避免误分割子列表内的逗号。
  2. 子列表转换:遍历分割后的字段,将首尾带方括号的字段去掉括号,按逗号分割并清理空格,转换为子列表。
  3. 适配多行数据:如果文件有多行,只需循环读取每一行并调用parse_custom_line即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:28:15