如何使用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)
补充说明
- 打开文件时指定
encoding='utf-8',可避免不同环境下的编码乱码问题 - 加入
if row:判断可以跳过CSV中的空行,避免索引报错 - 如果CSV列名可能存在大小写差异或空格问题,可先将表头转为统一格式(比如小写)再匹配
内容的提问来源于stack exchange,提问作者Fatima
相关产品推荐
相关产品推荐

