当前位置: 首页 > news >正文

KEGG注释脚本kofam2kegg.py--脚本010

采用kofam结合kegg官网htxt进行注释

用法: 

python kofam2kegg.py kofam.out ath00001.keg my_kegg_output

 code:

import sys
from collections import defaultdict

def parse_kofam_file(kofam_file):
    ko_to_genes = defaultdict(list)
    with open(kofam_file) as f:
        for line in f:
            parts = line.strip().split('\t')
            if len(parts) == 2:
                gene, ko = parts
                ko_to_genes[ko].append(gene)
    return ko_to_genes

def parse_keg_file(keg_file):
    ko_to_pathway = defaultdict(list)
    pathway_info = {}
    level1 = level2 = pathway = ''
    pathway_id = ''
    with open(keg_file) as f:
        for line in f:
            line = line.strip()
            if line.startswith('A'):
                level1 = line[1:].strip()
            elif line.startswith('B'):
                level2 = line[1:].strip()
            elif line.startswith('C'):
                parts = line.split()
                pathway = ' '.join(parts[1:-1])
                pathway_id = parts[-1].split(':')[-1]
                pathway_info[pathway_id] = {
                    'Pathway': pathway,
                    'Level1': level1,
                    'Level2': level2
                }
            elif line.startswith('D'):
                parts = line.split('\t')
                if len(parts) == 2:
                    ko = parts[1].split()[0]
                    ko_to_pathway[ko].append(pathway_id)
    return ko_to_pathway, pathway_info

def main(kofam_file, keg_file, output_file):
    ko_to_genes = parse_kofam_file(kofam_file)
    ko_to_pathway, pathway_info = parse_keg_file(keg_file)

    pathway_dict = defaultdict(lambda: {'genes': set(), 'kos': set()})

    for ko, genes in ko_to_genes.items():
        if ko in ko_to_pathway:
            for pw_id in ko_to_pathway[ko]:
                pathway_dict[pw_id]['genes'].update(genes)
                pathway_dict[pw_id]['kos'].add(ko)

    with open(output_file, 'w') as out:
        out.write("Pathway\tGeneCount\tPathway ID\tLevel 1\tLevel 2\tKOs\tGenes\n")
        for pw_id, data in pathway_dict.items():
            info = pathway_info.get(pw_id, {})
            out.write(f"{info.get('Pathway', '')}\t{len(data['genes'])}\tko{pw_id}\t"
                      f"{info.get('Level1', '')}\t{info.get('Level2', '')}\t"
                      f"{';'.join(sorted(data['kos']))}\t{';'.join(sorted(data['genes']))}\n")

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("用法: python 1.py kofam.out keg_file output_file")
    else:
        main(sys.argv[1], sys.argv[2], sys.argv[3])

相关文章:

  • 小程序页面传值的多种方式
  • SQL语言
  • 力扣hot100_技巧_python版本
  • Multisim使用说明详尽版--(2025最新版)
  • 高效爬虫:一文掌握 Crawlee 的详细使用(web高效抓取和浏览器自动化库)
  • CS5346 - Interactivity in Visualization 可视化中的交互
  • Java 架构设计:从单体架构到微服务的转型之路
  • 大语言模型深度思考与交互增强
  • 策略模式随笔~
  • 适合单片机裸机环境的运行的软件定时器框架
  • Linux 下 Module 工具的介绍与使用
  • 深入解读:2024 可信数据空间建设及应用参考指南【附全文阅读】
  • Go 语言中的局部变量是分配在栈区还是堆区
  • 数据结构-限定性线性表 - 栈与队列
  • 在Mac上离线安装k3s
  • HarmonyOS:页面滚动时标题悬浮、背景渐变
  • 【微服务管理】深入理解 Gateway 网关:原理与实现
  • fbx/obj/glb/gltf/b3dm等通用格式批量转换成osgb
  • STL之priority_queue的用法与实现
  • 第一阶段补充知识
  • 网站竞争案例/软文推广300字
  • 中原区网站建设/劳动局免费培训项目
  • 合肥网站推广优化/郑州网络推广代理顾问
  • 在哪个网站做失业分解/苏州关键词优化怎样
  • 媒体查询做响应式网站有哪些/恢复2345网址导航
  • 网站正在建设中的素材动图/山东seo优化