问:我目前在文件中有一个基因列表。每条线都有一条染色体及其信息。这样的条目显示为:
NM_198212 chr7 + ** 115926679 ** ** 115935830 ** 115927071 11593344 2 * 115926679 *,'115933260',* 115927221 *,'115935830',
染色体的序列始于碱基** 115926679 * *并继续到(但不包括)基础** 115935830 **
如果我们想要剪接的序列,我们使用外显子。第一个从
* 115926679 *扩展到* 155927221 *,第二个从'115933260'扩展到' 115935830',
但是在互补序列上遇到了一个问题,例如:
NM_001005286 chr1-** 245941755 ** *** 245942680 *** 245941755 245942680 1 * 245941755 *,'245942680'
由于第3列是“-”,因此这些坐标是指反义链(链的互补链)。第一个碱基(粗体)与有义链的最后一个碱基(斜体)匹配。由于该文件仅具有正义立场,因此我需要尝试将反义链上的坐标转换为正义链,选择正确的序列,然后对其进行反向补充。
就是说,我只编程了半年左右,并且不确定如何开始执行此操作。
我写了一个正则表达式:
'(NM_ \ d +)\ s +(chr \ d +)([(\ +)|(-)])\ s +(\ d +)\ s +(\ d +)\ s +(\ d +) \ s +(\ d +)\ s +(\ d +)\ s +(\ d +),(\ d +),s +(\ d +),(\ d +)',
但现在不确定如何启动此功能...
如果有人可以帮助我全面入门,也许让我知道如何做到这一点,我将非常感激。
好:假设这是25号染色体:
AAAAAAAAAACCCCCCCCCCTTTTTTTTTTGGGGGGGGGG
(每个字符有10个)。
现在:如果我找对未剪接基因:
<等等> chr25 + 10 20 <等等>
然后在第10位(从0开始)的基因开始,并且上升,但不包括20位所以其:
CCCCCCCCCC
这简单。它与python字符串切片非常匹配。
如果给我,它会更加令人困惑:
<blah> chr25-10 20 <blah>
您拥有的是积极的一环。但是这个基因在负(互补)链上。记住染色体是一条可溶链的样子:
AAAAAAAAAACCCCCCCCCCTTTTTTTTTTGGGGGGGGGG
TTTTTTTTTTGGGGGGGGGGGGAAAAAAAAAACCCCCCCCCCCC
我们正在寻找底部链上的基因。意味着我们从右边开始从0开始计数。从左开始编号上链,从右开始编号下链。所以我要的是AAAAAAAAAA。
要注意的是,我只给你顶峰。我没有给你最底层的东西。(您可以从顶层产生自己,但鉴于规模很大,我建议您不要这样做。)
因此,您需要转换坐标。在底部链上,基数0(最右边的C)与顶部链上的基数39相对。以1为底的是38,以2为底的情况。(重要点:注意,每次将这两个数相加时会发生什么。)因此,以10为底的是29,以19为底的20
。 :如果我想在底部链上找到10-20的底数,我可以在顶部链上看20-29的底数(然后反向补充)。
我需要弄清楚如何将底部链上的坐标转换为底部链上的等效坐标。是的:
我尝试过,这非常令人困惑:
fields = line.split('\ t')
geneID,chr,strand = fields [:2]
start = int(fields [3])
end = int(fields [4])
如果strand =='-':
start,end = end,start
正确,但是还不够。这将取10和20,然后将其变成20和10。
我知道我可以通过执行以下操作来反补字符串:
r = s [::-1]
bc = {'A':'T', 'C':'G','G':'C','T':'A'}
l = list(r)
o = [对于b中的bc [base]为基]
返回''.join(o)
答:您可以从左侧或右侧开始,假设您已经知道如何提取“ +”或“-”以及开始和结束位置->如果不回发。请注意,最小的数字始终是切片中的第一个-> [:]
展开| 选择| 包装| 行号
forward =“ AAAAAAAAAAXXXXXXXXXXTTTTTTTTTTGGGGGGGGGGGG”
向前打印[10:20] ##打印“ X”的
向后=“ AAAAAAAAAACCCCCCCCCCTTTTTTTTTTGGGGGGGGGGGGTTTTTTTTGGGGGGGGGGYYYYYYYYYYYYCCCCCCCCCC”
向后打印[-20:-10] ##打印“ Y”
如果您知道每个序列始终为10,也可以拆分字符串,否则必须测试一些中断指示符。
展开| 选择| 包装| 行号
向后=“ AAAAAAAAAACCCCCCCCCCTTTTTTTTTTGGGGGGGGGGGGTTTTTTTTTGGGGGGGGGGGAGAAAAAAAAAACCCCCCCCCC”
list_of_seq = [backward [start:start + 10]用于范围内的起始(0,len(backward),10)]
打印list_of_seq
在[10,-20,30,-30,70]中开始:
打印list_of_seq [开始/ 10]