如何在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
代码说明
- 自定义字段分割:通过遍历字符,标记是否处于方括号内部,只有括号外的逗号才作为字段分隔符,避免误分割子列表内的逗号。
- 子列表转换:遍历分割后的字段,将首尾带方括号的字段去掉括号,按逗号分割并清理空格,转换为子列表。
- 适配多行数据:如果文件有多行,只需循环读取每一行并调用
parse_custom_line即可。
内容的提问来源于stack exchange,提问作者blexcat0
相关产品推荐
相关产品推荐

