比较两个文件并显示一个矩阵,其中0和1表示不存在或存在

2024-05-15 11:23:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,所以我真的很难编写脚本

所以,我需要的是对两个文件进行比较。一个文件包含某个数据库中的所有蛋白质,另一个文件只包含另一个文件中的部分蛋白质,因为它属于一种生物体。所以我需要知道这个数据库中的哪些蛋白质存在于我的有机体中。为此,我想建立一个类似矩阵的输出,其中0和1表示数据库中存在的每个蛋白质,这些蛋白质可能存在于我的生物体中,也可能不存在于我的生物体中

有人知道我怎么做吗? 我正试着用这样的东西

$ cat sorted.a
A
B
C
D
$ cat sorted.b
A
D
$ join  sorted.a sorted.b | sed 's/^/1 /' && join  -v 1 sorted.a sorted.b | sed 's/^/0 /'
1 A
1 D
0 B
0 C

但我不能使用它,因为有时蛋白质存在,但它不在同一条线上

以下是一个例子:

1-cysPrx_C
120_Rick_ant
14-03-2003
2-Hacid_dh
2-Hacid_dh_C
2-oxoacid_dh
2-ph_phosp
2CSK_N
2C_adapt
2Fe-2S_Ferredox
2H-phosphodiest
2HCT
2OG-FeII_Oxy

与相比

1-cysPrx_C
14-3-3
2-Hacid_dh
2-Hacid_dh_C
2-oxoacid_dh
2H-phosphodiest
2OG-FeII_Oxy
2OG-FeII_Oxy_3
2OG-FeII_Oxy_4
2OG-FeII_Oxy_5
2OG-Fe_Oxy_2
2TM
2_5_RNA_ligase2

有人知道我该怎么做吗? 谢谢你


Tags: 文件数据库蛋白质sedcatdhsortedjoin
1条回答
网友
1楼 · 发布于 2024-05-15 11:23:11

Python中最快的方法是读取有机体文件,并将每个蛋白质名称保存到一个集合中。然后打开并遍历您的all_蛋白质文件,为每个名称打印它,检查该名称是否存在于您的有机体集中,并适当打印0或1

如果您的有机体列表被称为“保护列表”,则示例代码:

with open(all_proteins_file) as f:
    for line in f:
        prot = line.strip()
        if prot in prot_list: num = 1
        else: num = 0
        print '%i %s' % (num, prot)

相关问题 更多 >