在一项复杂的任务中我需要你的帮助。你知道吗
这里有一个file1.txt
:
>Name1.1_1-40_-__Sp1
AAAAAACC-------------
>Name1.1_67-90_-__Sp1
------CCCCCCCCC------
>Name1.1_90-32_-__Sp1
--------------CCDDDDD
>Name2.1_20-89_-__Sp2
AAAAAACCCCCCCCCCC----
>Name2.1_78-200_-__Sp2
-------CCCCCCCCCCDDDD
我们的想法是创建一个名为file1.txt_Hsp
的新文件,例如:
>Name1.1-3HSPs-__Sp1
AAAAAACCCCCCCCCCDDDDD
>Name3.1_-__Sp2
AAAAAACCCCCCCCCCC----
>Name4.1_-__Sp2
-------CCCCCCCCCCCCCC
所以基本上我们的想法是:
from the same SpN
<;--(这里它非常重要,只有使用相同的SpN名称)在file1.txt
中相互比较。
例如,我必须比较:Name1.1_1-40_-__Sp1 vs Name1.1_67-90_-__Sp1
Name1.1_1-40_-__Sp1 vs Name1.1_90-32_-__Sp1
Name1.1_67-90_-__Sp1 vs Name1.1_90-32_-__Sp1
Name2.1_20-89_-__Sp2 vs Name2.1_78-200_-__Sp2
例如,当我比较时:
Name1.1_1-40_-__Sp1 vs Name1.1_67-90_-__Sp1
我得到:
>Name1.1_1-40_-__Sp1
AAAAAACC-------------
>Name1.1_67-90_-__Sp1
------CCCCCCCCC------
这里,如果ratio between number of letter matching with another letter / nb letter matching with a (-)
是<;0.20`,我想连接这两个序列。你知道吗
例如,这里有21 characters
,与另一个字母匹配的字母数=2(C and C
)。
与-
匹配的字母数是13
(AAAAAA+CCCCCCC
)
所以呢
ratio = 2/15 : 0.1538462
如果这个ratio < 0.20
,那么我想把这两个序列连接起来,比如:
>Name1.1-2HSPs_-__Sp1
AAAAAACCCCCCCCC------
(正如您所看到的,新seq的名称现在是:name.1-2HSPs \-uuuu Sp1,其中2表示有2个序列串联在一起)因此我们删除了xhsp的数字部分,其中X是串联的序列数。 获取file1.txt\u Hsp:
>Name1.1-2HSPs_-__Sp1
AAAAAACCCCCCCCC------
>Name1.1_90-32_-__Sp1
--------------CCDDDDD
>Name2.1_20-89_-__Sp2
AAAAAACCCCCCCCCCC----
>Name2.1_78-200_-__Sp2
-------CCCCCCCCCCDDDD
然后我用Name1.1-2HSPs_-__Sp1 vs Name1.1_90-32_-__Sp1
再做一次
>Name1.1-2HSPs_-__Sp1
AAAAAACCCCCCCCC------
>Name1.1_90-32-__Sp1
--------------CCDDDDD
Where ratio = 1/20 = 0.05
因为ratio is < 0.20
我想把这两个序列串联起来,比如:
>Name1.1-3HSPs_-__Sp1
AAAAAACCCCCCCCCCDDDDD
(如您所见,新seq的名称现在是:name.1-3HSPs_uuuuuusp1,其中3表示有3个序列串联在一起)
file1.txt_Hsp:
>Name1.1-3HSPs_-__Sp1
AAAAAACCCCCCCCCCDDDDD
>Name2.1_20-89_-__Sp2
AAAAAACCCCCCCCCCC----
>Name2.1_78-200_-__Sp2
-------CCCCCCCCCCDDDD
然后我用Name2.1_20-89_-__Sp2
和Name2.1_78-200_-__Sp2
再做一次
>Name2.1_20-89_-__Sp2
AAAAAACCCCCCCCCCC----
>Name2.1_78-200_-__Sp2
-------CCCCCCCCCCDDDD
Where ratio = 10/11 = 0.9090909
然后因为ratio is > 0.20
我什么也不做,得到了最后的file1.txt_Hsp
:
>Name1.1-3HSPs_-__Sp1
AAAAAACCCCCCCCCCDDDDD
>Name2.1_20-89_-__Sp2
AAAAAACCCCCCCCCCC----
>Name2.1_78-200_-__Sp2
-------CCCCCCCCCCDDDD
这是我需要的最终结果。你知道吗
最简单的例子是:
>Name1.1_10-60_-__Seq1
AAA------
>Name1.1_70-120_-__Seq1
--AAAAAAA
>Name2.1_12-78_-__Seq2
--AAAAAAA
比率是1/8 = 0.125
,因为只有1个字母匹配,8个字母与(-)匹配
因为ratio < 0.20
I将两个序列Seq1连接到:
>Name1.1_2HSPs_-__Seq1
AAAAAAAAA
新文件应该是:
>Name1.1_2HSPs_-__Seq1
AAAAAAAAA
>Name2.1_-__Seq2
--AAAAAAA
**这是我真实数据的一个例子**
>YP_009186705
MMSCQSWMMKYFTKVCNRSNLALPFDQSVNPVSFSMISSHDVMLKLDDEIFYKSLNQSNL
ALPFDQSVNPVSFSMISSHDLIA
>XO009980.1_26784332-20639090_-__Agapornis_vilveti
------------------------------------------------------LNQSNL
ALPFDQSVNPVSFSMISSHDLIA
>CM009917.1_20634332-20634508_-__Neodiprion_lecontei
---CDSWMIKFFARISQMC---IKIHSKYEEVSFFLFQSK--KKKIADSHFFRSLNQDTA
-------LNTVSY----------
>XO009980.1_20634508-20634890_-__Agapornis_vilveti
MMSCQSWMMKYFTKVCNRSNLALPFDQSVNPVSFSMISSHDVMLKL--------------
-----------------------
>YUUBBOX12
MMSCQSWMMKYFTKVCNRSNLALPFDQSVNPVSFSMISSHDVMLKLDDEIFYKSLNQSNL
ALPFDQSVNPVSFSMISSHDLIA
我应该得到:
>YP_009186705
MMSCQSWMMKYFTKVCNRSNLALPFDQSVNPVSFSMISSHDVMLKLDDEIFYKSLNQSNL
ALPFDQSVNPVSFSMISSHDLIA
>XO009980.1_2HSPs_-__Agapornis_vilveti
MMSCQSWMMKYFTKVCNRSNLALPFDQSVNPVSFSMISSHDVMLKLLNQSNL
ALPFDQSVNPVSFSMISSHDLIA
>CM009917.1_20634332-20634508_-__Neodiprion_lecontei
---CDSWMIKFFARISQMC---IKIHSKYEEVSFFLFQSK--KKKIADSHFFRSLNQDTA
-------LNTVSY----------
>YUUBBOX12
MMSCQSWMMKYFTKVCNRSNLALPFDQSVNPVSFSMISSHDVMLKLDDEIFYKSLNQSNL
ALPFDQSVNPVSFSMISSHDLIA
XO009980.1_26784332-20639090_-__Agapornis_vilveti
与XO009980.1_20634508-20634890_-__Agapornis_vilveti
的比值为:0/75=0
如您所见,有些序列没有[\d]+[-]+[\d]
模式,如YP_009186705
或YUUBBOX12
,这些模式不必串联,只需添加到输出文件中即可。你知道吗
非常感谢你的帮助。你知道吗
你可以这样做。你知道吗
它提供了一个字典,其中键是文件编号,值是列表中的dna序列。你知道吗
这就得到了这个比率;您可能需要考虑序列中字符不匹配的情况(而且两者都不是“-”),这里我假设这和“-”不是一个不同的情况。你知道吗
一个连接字符串的助手函数:这里我以不匹配字符为例,输入一个“X”来标记它(如果它发生过的话)。你知道吗
最后,在另一个以文件号为键,以串联列表为值的字典中,循环遍历字典列表以获得串联的答案。你知道吗
首先,让我们将文本文件读入
(name, seq)
元组:然后我们定义helper函数,每个函数用于检查concat,然后concat用于seq,merge用于name(使用nest helper获取HSPs计数):
然后我们将编写一个脚本,按顺序在元组上运行,检查spn匹配,然后concat\u检查,并为下一次比较转发新的配对,必要时添加到最终列表中:
请注意,我只检查了文本文件中连续序列的串联,您必须重新使用我在不同脚本中编写的方法来说明组合。我让你自己决定。你知道吗
希望这有帮助。:)
相关问题 更多 >
编程相关推荐