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

Python读取CSV为多维列表时重复最后一行的问题排查

问题:读取CSV到多维列表时所有行都是最后一行的内容

我尝试把一个52行7列的CSV文件读取成Python多维列表,但运行代码后输出的52行全是CSV的最后一行。确定是readFile函数有问题,但找不到错误点。

原代码

rows = 52
cols = 7

def readFile():

  matrix = []

  file = open("rainfall.csv","r")
  for line in file:
    data = line.split(",")

  for row in range(rows):
    matrix.append([])
    for col in range(cols):
        matrix[row].append(data[col])
  
  return matrix
      
def display(matrix):
  for counter in matrix:
    for values in counter:
      print(values, end=" ")
    print()

matrix = readFile()
display(matrix)

当前输出(简化版)

8 25 1 6 21 23 0 
8 25 1 6 21 23 0 
...
8 25 1 6 21 23 0 

错误根源

你的readFile函数逻辑完全错误:

  1. 第一个for循环遍历文件每一行时,每次都会把data变量覆盖成当前行的拆分结果,循环结束后data里只存了最后一行的内容。
  2. 后面的嵌套循环只是重复把这最后一行的元素添加到matrix的每一行里,自然所有行都一样。

修复方案1:遍历文件时直接构建矩阵

这是最直接的写法,读取每一行就处理并添加到矩阵中,还能避免硬编码行数:

def readFile():
    matrix = []
    # 用with语句自动管理文件关闭,避免资源泄漏
    with open("rainfall.csv", "r") as file:
        for line in file:
            # 去掉行尾的换行符,再拆分列
            data = line.strip().split(",")
            # 将字符串转为整数(如果需要数值类型的话)
            row_data = [int(item) for item in data]
            matrix.append(row_data)
    return matrix
      
def display(matrix):
    for row in matrix:
        for values in row:
            print(values, end=" ")
        print()

matrix = readFile()
display(matrix)

修复方案2:先收集所有行再做校验(可选)

如果你需要验证行数和列数是否符合预期,可以先把所有行读进来再处理:

expected_rows = 52
expected_cols = 7

def readFile():
    matrix = []
    with open("rainfall.csv", "r") as file:
        # 一次性读取并处理所有行
        all_lines = [line.strip().split(",") for line in file]
    
    # 校验行数是否符合预期
    if len(all_lines) != expected_rows:
        print(f"警告:文件实际行数为{len(all_lines)},预期{expected_rows}")
    
    for line_data in all_lines:
        # 校验列数是否符合预期
        if len(line_data) != expected_cols:
            print(f"警告:某行实际列数为{len(line_data)},预期{expected_cols}")
        # 转为整数类型
        row = [int(item) for item in line_data]
        matrix.append(row)
    return matrix
      
def display(matrix):
    # 简化打印逻辑
    for row in matrix:
        print(" ".join(map(str, row)))

matrix = readFile()
display(matrix)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:45:13