查询多份flat文件多维数组指定行列值的最优解决方案
优化实现方案
核心优化逻辑
你之前导入MySQL的方案存在严重的冗余操作:全量加载180份文件合计1620万个数值入库,本质是为了查询不到200个目标值,完全没必要消耗额外的存储和计算开销。
本次需求的核心优化点是:只读取每个文件中需要的固定位置内容,跳过所有无关数据,IO和计算开销可降至原方案的千分之一以下。
可直接落地的实现方案
1. Linux/Mac 环境Shell单行命令(最快方案)
直接用awk按行匹配即可,读取到第155行后会自动终止当前文件的读取,不会加载全文件内容:
for f in 你的文件目录/*.txt; do awk 'NR==155{print FILENAME, $145; exit}' "$f"; done
输出结果会直接按「文件名 目标数值」的格式打印。
2. 跨平台Python实现(适合需要后续处理数据的场景)
逐行读取跳过前154行,仅处理第155行内容,内存占用极低,全量180份文件执行耗时通常低于1秒:
import os # 替换为你的flat文件存放目录 FILE_DIR = "./flat_files" result = [] for file_name in os.listdir(FILE_DIR): if not file_name.endswith(".txt"): continue file_path = os.path.join(FILE_DIR, file_name) with open(file_path, "r", encoding="utf-8") as f: # 跳过前154行无关内容 for _ in range(154): next(f) # 读取目标行,按空格拆分后取第144位(Python下标从0开始计数) target_line = f.readline() target_value = target_line.split()[144] result.append((file_name, target_value)) # 打印最终结果 for fname, val in result: print(f"{fname}: {val}")
性能参考
- 原MySQL导入查询方案:全量数据入库+查询耗时通常在几十秒到数分钟不等
- 上述文本直接处理方案:无额外存储开销,总耗时<1秒
内容的提问来源于stack exchange,提问作者Alex Godlewsky
相关产品推荐
相关产品推荐

