You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从第7列开始两两合并ATGC列,求高效Python实现方案

高效处理大列数文本文件的Python实现

针对你处理432行、超120万列文本文件的需求,以下是内存友好且速度更优的Python实现方案,核心思路是逐行处理避免加载整个大文件到内存,同时利用Python高效的字符串和列表操作替代awk的列处理逻辑:

基础实现版本

适合直接指定文件路径的场景,代码简洁易读:

input_path = "input.txt"
output_path = "output.txt"

with open(input_path, 'r') as infile, open(output_path, 'w') as outfile:
    for line in infile:
        # 分割行到列列表,自动处理任意数量的空格分隔
        columns = line.strip().split()
        # 保留前6列不变
        result = columns[:6]
        # 从第7列(索引6)开始,每两列合并
        for idx in range(6, len(columns), 2):
            # 处理列数为奇数的边界情况:若最后剩单列则直接保留
            if idx + 1 < len(columns):
                result.append(columns[idx] + columns[idx+1])
            else:
                result.append(columns[idx])
        # 拼接成行并写入输出文件
        outfile.write(' '.join(result) + '\n')

性能优化版本

利用sys模块的标准IO流进一步提升速度,适合通过管道调用的场景(处理超大文件时速度更优):

import sys

def process_single_line(line):
    columns = line.strip().split()
    result = columns[:6]
    # 步长为2遍历,提前判断避免越界
    for idx in range(6, len(columns)-1, 2):
        result.append(columns[idx] + columns[idx+1])
    # 检查是否存在未配对的最后一列
    if len(columns) > 6 and len(columns) % 2 != 0:
        result.append(columns[-1])
    return ' '.join(result) + '\n'

def main():
    # 逐行读取标准输入,处理后写入标准输出
    for line in sys.stdin:
        sys.stdout.write(process_single_line(line))

if __name__ == "__main__":
    main()

使用方式

将上述代码保存为merge_bases.py,然后在终端执行:

python merge_bases.py < input.txt > output.txt

为什么比awk更快?

  • 对于超120万列的极端场景,awk的列解析逻辑会因为列数过多产生额外开销,而Python的列表分割和拼接是底层优化的操作,处理效率更高;
  • 逐行处理的逻辑保证内存占用始终维持在单行列数据的大小,不会出现内存溢出问题;
  • sys版本的IO操作跳过了Python内置open的额外封装,直接对接系统IO流,进一步降低IO延迟。

内容的提问来源于stack exchange,提问作者shanwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:35:24