Python如何批量读取多个文件跳过前7行表头并将数据存储到数组中
批量读取同格式数据文件实现方案
你原有的单文件读取代码存在冗余问题:外层的for line in datafile和内层datafile.readlines()重复遍历了文件内容,可以先简化单文件读取逻辑,再通过封装+批量匹配的方式实现多文件高效读取,具体实现如下:
步骤1:导入依赖模块
import numpy as np import glob
步骤2:封装单文件读取函数
def read_single_file(file_path, skip_rows=7, col_num=14): # 跳过前skip_rows行表头,读取所有数据列 data = np.loadtxt(file_path, skiprows=skip_rows) # 按列拆分对应变量,返回元组 return ( data[:, 0], data[:, 1], data[:, 2], data[:, 3], data[:, 4], data[:, 5], data[:, 6], data[:, 7], data[:, 8], data[:, 9], data[:, 10], data[:, 11], data[:, 12], data[:, 13] )
这里直接用numpy内置的loadtxt方法,比手动逐行读取更简洁高效,原生支持跳过指定行数、自动转数值类型。
步骤3:批量匹配并读取所有文件
你可以根据自己的文件命名规则调整匹配规则,比如所有数据文件都存在当前目录下,后缀为.txt,就可以这么写:
# 匹配当前目录下所有符合格式的txt文件,可自行修改路径规则,比如'data/*.txt'就是读data文件夹下的所有txt file_list = glob.glob('./*.txt') # 初始化存储容器,两种方式二选一即可 # 方式1:用列表按顺序存储,每个元素对应一个文件的所有列数据 all_data = [] # 方式2:用字典存储,键为文件名,值为对应文件的列数据 all_data_dict = {} for f_path in file_list: x0, y1, Z, u, v, V0, V1, Yf, Yo, T, Yp0, Yp1, D, rho = read_single_file(f_path) # 按方式1存储 all_data.append([x0, y1, Z, u, v, V0, V1, Yf, Yo, T, Yp0, Yp1, D, rho]) # 按方式2存储 all_data_dict[f_path] = [x0, y1, Z, u, v, V0, V1, Yf, Yo, T, Yp0, Yp1, D, rho]
数据访问示例
- 用列表存储的话,
all_data[i][j]就代表第i个文件的第j列数据,比如all_data[0][0]就是第一个文件的x0列 - 用字典存储的话,
all_data_dict['./random_file.txt'][1]就是对应random_file.txt的y1列
如果你的文件数量非常大,还可以进一步加多进程读取逻辑,普通场景下上述代码已经足够满足需求,比重复粘贴代码效率高很多,后续新增列或者修改跳过行数,只需要改一次读取函数即可。
内容的提问来源于stack exchange,提问作者Emotional Damage
相关产品推荐
相关产品推荐

