本帖最后由 Anome 于 2023-5-5 22:34 编辑
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)
with open("raw_id.txt", "r") as f:
search_values = f.read().split()
if search_values[0].startswith("Os"):
search_col = 0
result_col = 1
else:
search_col = 1
result_col = 0
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)
|