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

如何使用Python按列名将CSV文件拆分为两个列表?

按CSV列名拆分数据到两个列表的正确实现

需求说明

要把CSV文件里的「Molecule Name」和「SMILES」两列数据分别提取到两个列表中,示例CSV内容如下:

Molecule Name,SMILES
ZINC53 (Aspirin),CC(=O)Oc1ccccc1C(=O)O
ZINC7460 (Vatalanib),Clc1ccc(Nc2nnc(Cc3ccncc3)c3ccccc23)cc1
ZINC1493878 (Sorafenib),CNC(=O)c1cc(Oc2ccc(NC(=O)Nc3ccc(Cl)c(C(F)(F)F)c3)cc2)ccn1

原代码存在的问题

你提供的代码有几个明显错误:

  • 缩进错误:with语句块前多了缩进,会触发语法错误
  • 判断逻辑错误:type_col1是列的索引(整数类型),却拿它和字符串「Molecule Name」做比较,这个条件永远不会成立
  • 取值错误:就算条件成立,直接把整行column追加到列表,而不是取对应列的元素
  • 遗漏模块导入:没导入csv模块,会触发NameError

修正后的代码

import csv

namelist = []
smileslist = []

with open('./file.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter=',')
    header = next(reader)  # 获取表头行
    # 拿到目标列的索引
    name_idx = header.index("Molecule Name")
    smiles_idx = header.index("SMILES")
    
    # 遍历每一行数据,按索引提取对应列的值
    for row in reader:
        if row:  # 跳过空行(可选)
            namelist.append(row[name_idx])
            smileslist.append(row[smiles_idx])

# 验证结果(可选)
print(namelist)
print(smileslist)

补充说明

  1. 打开文件时指定encoding='utf-8',可避免不同环境下的编码乱码问题
  2. 加入if row:判断可以跳过CSV中的空行,避免索引报错
  3. 如果CSV列名可能存在大小写差异或空格问题,可先将表头转为统一格式(比如小写)再匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:05:25