如何将单个CSV中空白行分隔的不同数据块分别读取为独立np数组
方法1:迭代式读取(适合大文件,内存占用极低)
借助Python标准库itertools.groupby按空行分组,直接把分组后的行迭代器传给np.loadtxt,不需要手动解析数值,效率远高于纯Python逐行判断的实现:
import numpy as np from itertools import groupby result = [] with open("test_case_11x5.txt", "r") as f: # 按行是否为空分组 for is_empty, line_iter in groupby(f, key=lambda line: line.strip() == ""): if not is_empty: # 非空行组直接传入loadtxt读取为数组 result.append(np.loadtxt(line_iter))
该方法全程是流式处理,不需要加载整个文件到内存,哪怕是GB级的大文件也能正常运行,处理速度和原生np.loadtxt单文件读取基本一致。
方法2:全量读取拆分(适合小文件,写法更简洁)
如果文件体积不大,可以一次性读取全部内容后按空行拆分,代码更短:
import numpy as np with open("test_case_11x5.txt", "r") as f: # 按空行拆分数据块 blocks = [blk.strip() for blk in f.read().split("\n\n") if blk.strip()] result = [np.loadtxt(blk.splitlines()) for blk in blocks]
内容的提问来源于stack exchange,提问作者user1832524
相关产品推荐
相关产品推荐

