水稻MSU和RAP格式ID转换

查看 140|回复 2
作者:Anome   
1.作用
如题,水稻有两种注释,分别是IRGSP和RGAP,分别使用RAP和MSU两种格式的基因ID,RAP格式为“Os-Chr-g-number”,MSU格式为“LOC_Os-Chr-g-number”。有时候需要将它们互相转化。Ensembl plant数据库和RAP-DB数据库都可以在线转换,但是感觉下载不是很方便,所以自己写了一个转换用的脚本。
2.用法
  • 使用了pandas包,没有安装的需要安装一下。
  • 将需要转换的基因id复制到文件raw_id.txt里,一行一个基因ID
  • 直接运行脚本即可
  • 我是直接判断第一行是不是Os开头的,是就认为是RAP格式,不是就认为是MSU格式,所以第一行不要写其他东西,要符合RAP或者MSU的格式。代码中有注释说明

    3.文件说明
  • gene_id_conversion.py 为脚本本身
  • RAP-MSU_2023-03-15.txt 为从RAP-DB数据库下载的两种ID对应的文件。里面挺多其中一种ID有而另外一种没有。如果数据库中这个有更新,可以自己去下载,然后替换掉这个文件,将代码中读取这个文件的那一行改成新文件。
  • raw_id.txt 需要将你需要转换的id复制到这里
  • result.txt 这个是转换成功的,脚本运行结束后打开这个文件copy即可。
  • result_None.txt 这个对应其中一种id存在而另外一种id不存在的情况,例如基因Os01g0100300在RAP中存在,但是对应到MSU中则没有,为None。
  • result_no_exist.txt 对应的是不存在这种ID,例如不小心写入了OOOs1323这种错误的id,或者是其他格式的ID,则会写入到这个文件里。
  • 我的压缩包里的文件里有内容,是我之前进行转换的时候存在的,可以按照raw_id.txt里的那种进行输入。

    4.代码
    import pandas as pd
    # 读取文件
    df = pd.read_csv('RAP-MSU_2023-03-15.txt', sep='\t', header=None)
    # 获取用户输入。下面这些本来是手动选择转换的形式的,后来来回转换每次都选择太麻烦了,就删除了,可以直接删掉
    # col_num = int(input("请输入要转换的形式(输入1或2):\n1:RAP -> MSU\n2:MSU -> RAP\n"))
    # search_dir = input("请输入要转换的id所在文件路径:")
    # with open(search_dir, "r") as f:
    #     search_values = f.read().split()
    with open("raw_id.txt", "r") as f:
        search_values = f.read().split()
    # 确定要检索的列。同上,可以直接删掉
    # if col_num == 1:
    #     search_col = 0
    #     result_col = 1
    # else:
    #     search_col = 1
    #     result_col = 0
    # 我是直接判断第一行是不是Os开头的,是就认为是RAP格式,不是就认为是MSU格式,所以第一行不要写其他东西,要符合RAP或者MSU的格式。
    if search_values[0].startswith("Os"):
        search_col = 0
        result_col = 1
    else:
        search_col = 1
        result_col = 0
    # 将df转换为字典形式
    id_dict = dict(zip(df.iloc[:, search_col], df.iloc[:, result_col]))
    # 检索值并输出结果
    res = []
    res_n = []
    no_res = []
    for value in search_values:
        if value in id_dict.keys():
            result = id_dict[value]
            if result != "None":
                res.append(result)
            else:
                res_n.append(f"{value} None")
        else:
            no_res.append(f"{value} 不存在")
    res = '\n'.join(res)
    res_n = '\n'.join(res_n)
    no_res = '\n'.join(no_res)
    with open("result.txt", "w", encoding="utf-8") as f:
        f.write(res)
    with open("result_None.txt", "w", encoding="utf-8") as f:
        f.write(res_n)
    with open("result_no_exist.txt", "w", encoding="utf-8") as f:
        f.write(no_res)

    文件, 格式

  • 雾都孤尔   

    支持原创,感谢分享。
    xixicoco   

    吼吼,是袁隆平搞的东西吗??
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部