Python读取含多组连续行数据的文件并拆分至对应数组
Python处理特定Neq规则的数据文件方案
核心思路
- 用字典动态存储
b1、b2...bn数组,无需提前定义所有可能的数组,适配任意正整数的Neq值 - 通过行索引控制读取位置,确保
Neq=n时能连续读取后续n-1行的sigma值,分别对应存入b1到bn
代码实现(全量读取版,适合小文件)
# 初始化存储数组的字典,支持动态添加bN b_arrays = {} with open('your_data_file.txt', 'r') as f: lines = f.readlines() idx = 0 while idx < len(lines): # 解析当前行的Neq和sigma值(请根据实际文件调整列索引) current_line = lines[idx].strip().split() neq = int(current_line[1]) # 假设Neq是第二列,索引为1 sigma = float(current_line[2]) # 假设sigma是第三列,索引为2 # 将当前行sigma存入b1 b_arrays.setdefault('b1', []).append(sigma) # 若Neq>1,读取后续n-1行,分别存入b2到bn if neq > 1: for i in range(1, neq): idx += 1 if idx >= len(lines): break # 防止文件提前结束导致索引越界 next_line = lines[idx].strip().split() next_sigma = float(next_line[2]) key = f'b{i+1}' b_arrays.setdefault(key, []).append(next_sigma) idx += 1 # 打印结果(按b1、b2顺序排序输出) for key in sorted(b_arrays.keys()): print(f"{key}: {b_arrays[key]}")
代码实现(逐行读取版,适合大文件)
如果你的数据文件体积较大,一次性读取所有行会占用过多内存,推荐使用逐行读取的方式:
b_arrays = {} with open('your_data_file.txt', 'r') as f: while True: line = f.readline() if not line: break # 文件读取完毕 # 解析当前行数据 current_line = line.strip().split() neq = int(current_line[1]) sigma = float(current_line[2]) # 存入b1 b_arrays.setdefault('b1', []).append(sigma) # 处理Neq>1的情况,读取后续n-1行 for i in range(1, neq): next_line = f.readline() if not next_line: break next_sigma = float(next_line.strip().split()[2]) key = f'b{i+1}' b_arrays.setdefault(key, []).append(next_sigma) # 输出结果 for key in sorted(b_arrays.keys()): print(f"{key}: {b_arrays[key]}")
注意事项
- 请根据实际文件的列分隔符调整
split()参数:如果是逗号分隔的CSV文件,改用split(',');如果是制表符,用split('\t') - 确认
Neq和sigma的列索引:代码中假设Neq是第二列(索引1)、sigma是第三列(索引2),请根据你的文件结构修改对应索引值 - 若文件存在格式异常(比如Neq值与后续实际行数不匹配),可以添加额外的异常捕获逻辑,避免程序崩溃
内容的提问来源于stack exchange,提问作者Fernando Roig
相关产品推荐
相关产品推荐

