Python中最符合Python风格的批量TXT数据导入数组方法
Python实现MATLAB多TXT文件读取逻辑 + 符合Python风格的TXT数据导入方法
一、对应MATLAB代码的Python实现
你的MATLAB代码逻辑是读取当前目录下所有.txt文件,提取第一列作为x数组,将每个文件的第二列作为单独列存入y数组。以下是功能对等的Python实现(基于numpy,和MATLAB的数组操作逻辑最接近):
import numpy as np import os # 获取当前目录下所有txt文件 txt_files = [f for f in os.listdir('.') if f.endswith('.txt')] N = len(txt_files) # 初始化y数组(先读取第一个文件确定行数) first_data = np.loadtxt(txt_files[0]) x = first_data[:, 0] y = np.zeros((len(x), N)) # 循环读取所有文件 for i in range(N): data = np.loadtxt(txt_files[i]) # 假设所有文件第一列相同,若不同可根据需求调整 y[:, i] = data[:, 1]
说明:
- 用
os.listdir筛选出.txt文件,替代MATLAB的dir numpy.loadtxt对应MATLAB的importdata,可直接读取数值型文本数据- 先读取第一个文件确定数组维度,避免动态扩容影响效率
二、符合Python风格的TXT数据导入方式
Python生态中,有两种更简洁、符合Pythonic风格的实现方式:
1. 基于numpy的简洁写法(列表推导式)
import numpy as np import os txt_files = [f for f in os.listdir('.') if f.endswith('.txt')] # 读取所有文件的第二列,合并为y数组 all_columns = [np.loadtxt(f)[:, 1] for f in txt_files] y = np.column_stack(all_columns) # 取第一个文件的第一列作为x x = np.loadtxt(txt_files[0])[:, 0]
用列表推导式批量读取数据,再通过np.column_stack合并列,代码更紧凑。
2. 基于pandas的高效实现(适合大规模数据)
如果文件数量多、数据量大,pandas的处理更高效且代码更简洁:
import pandas as pd import os txt_files = [f for f in os.listdir('.') if f.endswith('.txt')] # 批量读取所有txt文件,合并为DataFrame df_list = [pd.read_csv(f, sep='\s+', header=None, usecols=[1]) for f in txt_files] y_df = pd.concat(df_list, axis=1) # 转换为numpy数组(若需要) y = y_df.values # 获取x数组 x = pd.read_csv(txt_files[0], sep='\s+', header=None)[0].values
pd.read_csv支持自动识别空格分隔符(sep='\s+'),无需手动处理格式pd.concat可快速合并多个DataFrame为宽表,适合后续分析
附:你的TXT数据格式示例(空格分隔的两列数值):
896.5000000000 0.8694710776
896.7500000000 0.7608314184
897.0000000000 0.6349069122
897.2500000000 0.5092121001
897.5000000000 0.3955858698
内容的提问来源于stack exchange,提问作者jimbob97
相关产品推荐
相关产品推荐

