如何为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)
注意事项
- 先安装
tqdm:执行pip install tqdm - 如果CSV用逗号/制表符分隔,必须指定
delimiter参数(比如delimiter=',') - 统计总行数的步骤对超大文件会有短暂延迟,但这是实现准确进度条的必要前提
内容的提问来源于stack exchange,提问作者tobi delbruck
相关产品推荐
相关产品推荐

