Python实现向已有文本文件指定列写入二维数组的方法
解决方法
由于np.savetxt()会覆盖整个文件,无法保留原有固定内容,我们需要逐行读取文件,仅替换其中的负值,再将修改后的内容写回。以下是具体实现步骤:
步骤1:导入模块并准备数组
确保你的二维数组已转换为numpy数组(若未转换则执行以下操作):
import numpy as np # 将列表转为numpy数组(如果你的数组还不是numpy格式) columns = np.array(columns)
步骤2:读取原始文件内容
一次性读取所有行,方便后续修改操作:
with open('你的文件名.txt', 'r', encoding='utf-8') as f: lines = f.readlines()
步骤3:定位数据行起始位置
根据文件结构,找到需要修改的数据行的起始索引。从你的样本内容来看,数据行在155 740 AUX IFACE AUX QFACT AUX CELLGRP和 155 0 0两行之后:
data_start_idx = None for i, line in enumerate(lines): if '155 740 AUX' in line: data_start_idx = i + 2 # 跳过标题行和后续的统计行 break
步骤4:逐行替换负值
遍历每一行数据,找到其中的负值并替换为数组对应位置的值:
for row_idx in range(155): # 获取当前数据行并分割为单个元素 current_line = lines[data_start_idx + row_idx].strip() elements = current_line.split() # 定位所有负值的位置 negative_positions = [idx for idx, val in enumerate(elements) if float(val) < 0] # 替换每个负值为数组中对应元素(可调整格式化精度) for col_idx, pos in enumerate(negative_positions): elements[pos] = f"{columns[row_idx][col_idx]:.6f}" # 重新组合为一行并替换原行 modified_line = ' '.join(elements) + '\n' lines[data_start_idx + row_idx] = modified_line
步骤5:写入修改后的内容
将修改后的所有行写入新文件(建议先写入新文件验证,确认无误后再替换原文件):
with open('修改后的文件名.txt', 'w', encoding='utf-8') as f: f.writelines(lines)
注意事项
- 确保文件中数据行的数量正好是155行,与数组行数匹配;
- 每一行数据中的负值数量需与数组列数(60)一致,避免索引越界;
- 可调整数值格式化规则(如
:.6f)来匹配原文件的精度要求。
内容的提问来源于stack exchange,提问作者zargol7419
相关产品推荐
相关产品推荐

