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

使用numpy loadtxt与for循环读取多CSV文件失败问题排查

问题原因

你的循环只执行一次就终止,是因为return data, i写在了for循环的内部。return语句会直接结束函数执行,所以第一次循环读取完data1.csv后,函数就返回结果退出了,根本不会进入后续的循环迭代。

解决方案

要读取所有CSV文件的数据,需要先把每个文件的数据收集起来统一返回,或者用生成器逐个输出结果。

方案1:收集所有数据到列表后返回

修改代码,把每次读取的数据存入列表,循环结束后返回整个列表:

import numpy as np

def show_datasets(filenames):
    data_list = []
    for i, filename in enumerate(filenames):
        data = np.loadtxt(filename, delimiter=',', dtype=float)
        data_list.append((data, i))
    return data_list

# 调用并打印每个结果
results = show_datasets(['data1.csv', 'data2.csv', 'data3.csv'])
for res in results:
    print(res)

运行后会输出你期望的三个文件的结果。

方案2:使用生成器逐个返回数据

如果文件很大,不想一次性加载所有数据到内存,可以用生成器(yield)逐个返回:

import numpy as np

def show_datasets(filenames):
    for i, filename in enumerate(filenames):
        data = np.loadtxt(filename, delimiter=',', dtype=float)
        yield data, i

# 遍历生成器获取结果
for res in show_datasets(['data1.csv', 'data2.csv', 'data3.csv']):
    print(res)

这种方式每次只加载一个文件的数据,处理完再加载下一个,更节省内存。

补充说明
  • 使用enumerate(filenames)可以直接同时获取索引i和文件名filename,比手动用range(len(filenames))更简洁直观。
  • 原代码里的data=[]定义后被覆盖成了单个numpy数组,没有起到收集数据的作用,修正后改用data_list来存储每个文件的(data, i)元组。

内容的提问来源于stack exchange,提问作者wannabe-engineer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:44:49