MPI生成多份output.txt文件,如何高效加载并合并为单个数组?
批量合并MPI输出文件的高效方法
方法一:用Pandas快速实现
Pandas对批量文件的读取合并支持很友好,配合glob匹配文件,能轻松搞定跳过首行+合并的需求:
import pandas as pd import glob # 匹配所有output.txt开头的文件 file_paths = glob.glob("output.txt*") # 批量读取(跳过首行)并合并成DataFrame combined_df = pd.concat([pd.read_csv(f, skiprows=1, header=None, sep='\s+') for f in file_paths], ignore_index=True) # 转成numpy数组(按需转换) halo_c = combined_df.to_numpy()
这里sep='\s+'适配空格分隔的文本文件,若你的文件是其他分隔符直接替换即可。Pandas的IO优化比手动循环numpy.loadtxt更高效,代码也更简洁。
方法二:优化版Numpy写法
如果更倾向Numpy生态,用glob批量匹配+genfromtxt生成器表达式,能减少中间内存开销:
import numpy as np import glob file_paths = glob.glob("output.txt*") # 生成器逐个读取文件,避免一次性创建多个中间数组 halo_c = np.concatenate([np.genfromtxt(f, skip_header=1) for f in file_paths])
genfromtxt比loadtxt兼容性更好,批量匹配文件名也不用手动拼接序号,比你原来的写法更省心。
方法三:超大数据用Dask并行加载
如果后续文件数量暴涨、数据量超出内存,Dask可以实现并行延迟加载,避免内存溢出:
import dask.dataframe as dd # 自动匹配所有目标文件,并行读取 dask_df = dd.read_csv("output.txt*", skiprows=1, header=None, sep='\s+') # 计算并转成numpy数组 halo_c = dask_df.compute().to_numpy()
内容的提问来源于stack exchange,提问作者Sriram Ramaswamy
相关产品推荐
相关产品推荐

