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

如何为numpy.loadtxt添加进度指示器以显示大CSV文件读取进度?

给numpy.loadtxt添加超大CSV文件读取进度指示器

numpy的loadtxt本身没有内置进度显示功能,但可以通过包装输入流+进度条工具实现,下面是两种实用方案:

方案一:直接包装文件流(简单高效)

先统计文件总行数,再用tqdm包装文件对象,让loadtxt读取时同步显示进度:

import numpy as np
from tqdm import tqdm

# 统计文件总行数(用于进度条总长度)
def count_file_lines(filename):
    with open(filename, 'r') as f:
        return sum(1 for line in f)

filename = "your_large_file.csv"
total_lines = count_file_lines(filename)

# 带进度条读取文件
with open(filename, 'r') as f:
    # 如果文件有表头,先跳过并调整总行数
    # next(f)
    # total_lines -= 1
    data = np.loadtxt(tqdm(f, total=total_lines, desc="读取中"), dtype=np.int64, delimiter=',')

方案二:分块读取(适合内存紧张场景)

如果文件大到一次性加载会占满内存,可以分块读取后拼接,同时用进度条跟踪每块的读取进度:

import numpy as np
from tqdm import tqdm

filename = "your_large_file.csv"
chunk_size = 10000  # 每块读取的行数,根据内存情况调整
total_lines = count_file_lines(filename)
# 跳过表头的话记得减1
# total_lines -= 1

data_chunks = []
with open(filename, 'r') as f:
    # 跳过表头(如果有)
    # next(f)
    # 按块迭代读取
    for chunk in tqdm(
        np.loadtxt(f, dtype=np.int64, delimiter=',', chunksize=chunk_size),
        total=(total_lines // chunk_size) + 1,
        desc="分块读取中"
    ):
        data_chunks.append(chunk)

# 拼接所有块
data = np.concatenate(data_chunks)

注意事项

  1. 先安装tqdm:执行pip install tqdm
  2. 如果CSV用逗号/制表符分隔,必须指定delimiter参数(比如delimiter=',')
  3. 统计总行数的步骤对超大文件会有短暂延迟,但这是实现准确进度条的必要前提

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:42:09