如题,水稻有两种注释,分别是IRGSP和RGAP,分别使用RAP和MSU两种格式的基因ID,RAP格式为“Os-Chr-g-number”,MSU格式为“LOC_Os-Chr-g-number”。有时候需要将它们互相转化。Ensembl plant数据库和RAP-DB数据库都可以在线转换,但是感觉下载不是很方便,所以自己写了一个转换用的脚本。
2.用法
3.文件说明
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)