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

如何用for循环将CSV文件各列数据填充至对应列表?

你的问题核心是csv.reader返回的是一次性迭代器,第一次遍历完所有行后,这个迭代器就耗尽了,后续再遍历它拿不到任何数据,所以只有第一个列表被填充。给你两种靠谱的解决办法:

方法一:先把所有行读入内存再处理

先把CSV的所有行一次性读到一个列表里,这样就能反复遍历每一行来填充各个列的列表:

import csv

csv_file = "02_CSV_data1.csv"

with open(csv_file, 'r') as csv_doc:    
    doc_reader = csv.reader(csv_doc, delimiter = ",")
    # 将所有行读取到内存中的列表,可多次访问
    all_rows = list(doc_reader)
    
    # 初始化各个列的列表
    mpg = []
    cylinders = []
    displacement = []
    horsepower = []
    weight = []
    acceleration = []
    year = []
    origin = []
    lt = [mpg, cylinders, displacement, horsepower, weight, acceleration, year, origin]
    
    # 遍历每个列表和对应的列索引
    for col_index, target_list in enumerate(lt):
        # 遍历每一行,提取对应列的元素加入列表
        for row in all_rows:
            target_list.append(row[col_index])

方法二:用zip(*rows)转置行列(更简洁)

利用Python的解包和zip函数,可以直接把行数据转成列数据,一步到位填充所有列表:

import csv

csv_file = "02_CSV_data1.csv"

with open(csv_file, 'r') as csv_doc:    
    doc_reader = csv.reader(csv_doc, delimiter = ",")
    # 读取所有行并转置,得到各列的迭代器
    columns = zip(*doc_reader)
    # 把每列的迭代器转成列表,直接赋值给对应的变量
    mpg, cylinders, displacement, horsepower, weight, acceleration, year, origin = [list(col) for col in columns]

这种方法省去了手动循环的步骤,代码更简洁高效。

注意:如果你的CSV文件第一行是表头,记得先跳过表头行(比如用next(doc_reader)),避免表头被当成数据加入列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:39:34