如何按分隔符将原始数据拆分并读取为不同NumPy数组
按分隔行拆分文本数据为多个NumPy数组
你的原始数据格式如下:
####### ####### #col1 #col2 #col3 1 10 100 2 11 150 3 14 155 ####### ####### ####### ####### #col1 #col2 #col3 1 14 100 2 17 180 3 14 155 ####### ####### ####### ####### #col1 #col2 #col3 1 19 156 2 27 130 3 24 152 ####### #######
直接用numpy.loadtxt会把所有数据揉成单个数组,要按#######行拆分成独立数组,可以试试下面两种方法:
方法一:纯标准库+NumPy实现
先把文件内容按行读出来,手动按分隔符拆分出有效数据块,再对每个块单独用loadtxt加载。代码示例:
import numpy as np from io import StringIO # 读取文件所有行(如果数据是字符串形式,直接split('\n')就行) with open('your_data_file.txt', 'r') as f: all_lines = f.readlines() # 按分隔行拆分数据块 separator = '#######\n' data_blocks = [] current_block = [] for line in all_lines: if line == separator: # 遇到分隔符时,把当前积累的非空块存起来 if current_block: data_blocks.append(current_block) current_block = [] else: current_block.append(line) # 处理最后一个未被分隔符结尾的块 if current_block: data_blocks.append(current_block) # 把每个有效块转成NumPy数组 result_arrays = [] for block in data_blocks: # 过滤掉空行和注释行(#开头的行) valid_lines = [line for line in block if line.strip() and not line.strip().startswith('#')] if valid_lines: # 用StringIO把字符串模拟成文件对象,传给loadtxt array = np.loadtxt(StringIO(''.join(valid_lines))) result_arrays.append(array) # 验证结果 for idx, arr in enumerate(result_arrays): print(f"第{idx+1}个数据块:") print(arr) print('---')
方法二:用Pandas辅助拆分(适合已有Pandas依赖的场景)
如果你的项目已经在用Pandas,可以用它快速标记数据块再拆分,代码更简洁:
import pandas as pd import numpy as np # 先读取所有行用于标记块 with open('your_data_file.txt', 'r') as f: all_lines = f.readlines() # 给每一行数据分配块ID block_ids = [] current_block = -1 for line in all_lines: stripped_line = line.strip() if stripped_line == '#######': current_block += 1 # 只给有效数据行分配ID(跳过注释、分隔符和空行) elif stripped_line and not stripped_line.startswith('#'): block_ids.append(current_block) # 读取数据,跳过分隔符和注释行 df = pd.read_csv( 'your_data_file.txt', sep='\s+', comment='#', header=None, skiprows=lambda x: all_lines[x].strip() == '#######' ) # 按块ID拆分DataFrame,转成NumPy数组 result_arrays = [ df.iloc[[i for i, bid in enumerate(block_ids) if bid == k]].to_numpy() for k in set(block_ids) ]
内容的提问来源于stack exchange,提问作者brownser
相关产品推荐
相关产品推荐

