如何用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
相关产品推荐
相关产品推荐

