解析文件并匹配序列号(python)

我目前有一个文件中的基因列表。每行都有一个带有信息的染色体。这样的条目出现为:
NM_198212 CHR7 + ** 115926679 ** ** ** ** 115935830 ** 115927071 115933344 2*115926679*,'115933260
染色体的序列始于基础** 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+),(\ d+),s+(\ d+),(\ d+),'
但是现在不确定如何启动此功能...
如果有人可以帮助我开始这件事,也许让我看看如何做到这一点,我会非常感谢。
好:假设这是Chromsome 25:
AAAAAAAAAACCCCCCCCCCTTTTTTTTTTGGGGGGGGGG
(每个字符有10个)。
现在:如果我正在寻找一个未填充的基因:
chr25 + 10 20
然后,基因从位置10开始(从0开始)开始,但不包括位置20。因此,它:
CCCCCCCCCC
这很简单。它非常匹配python string切片。
如果我给你,那就更令人困惑:
chr25-10 20
您拥有的是积极的链。但是该基因是负(互补)链的。记住染色体看起来像一条链的样子:
AAAAAAAAAACCCCCCCCCCTTTTTTTTTTGGGGGGGGGG
TTTTTTTTTTTTTTTGGGGGGGGGGGGGGAGAAAAAAAAAAAAAAAAACCCCCCCCCC
我们正在寻找底链的基因。这意味着我们从右边从0开始计数。从左侧和右侧的底线编号。所以我想要的是aaaaaaaaaa。
捕获是,我只给您顶级链。我没有给你底线。 (您可以从顶部链中产生自己,但是鉴于它的大小有多大,我建议您反对。)
因此,您需要转换坐标。在底部链上,底座0(最右C)与顶部链的基部39相对。基数1反对基本38。基本2反对案例37。
所以:如果我想在底部链上找到10-20的基础,我可以厕所 k在顶部的基部20-29处(然后将其反向组合)。
我需要弄清楚如何将底线上的坐标转换为底链上的等效坐标。是:这很困惑
我努力了:
fields = line.split('\ t')
Geneid,chr,strand = fields [:2]
start = int(字段[3])
end = int(字段[4])
如果strand ==' - ':
开始,结束=结束,开始
这是正确的轨道,但是还不够。这将需要10和20,然后将其变成20和10。
而且我知道我可以这样做:
r = s [:: - 1]
bc = {'a':'t','c':'g','g':'c','t':'a'}
l =列表(r)
o = [BC [base] base in l]
返回''.join(o)
但是,从这里我迷路了。

# 回答1


您可以从左或右开始,假设您已经知道如何提取"+"或" - ",以及开始和结束帖子 - >如果不张贴。请注意,最小的数字始终是在切片中 - > [:]

选择 | 换行 | 行号
  1. forward="AAAAAAAAAAXXXXXXXXXXTTTTTTTTTTGGGGGGGGGG"
  2. print forward[10:20]  ## prints "X"'s
  3.  
  4. backward="AAAAAAAAAACCCCCCCCCCTTTTTTTTTTGGGGGGGGGGTTTTTTTTTTGGGGGGGGGGYYYYYYYYYYCCCCCCCCCC"
  5. print backward[-20:-10]  ## prints "Y"'s 

如果您知道每个序列始终为10,则还可以将字符串分开,否则必须测试一些断路指示器。

选择 | 换行 | 行号
  1. backward="AAAAAAAAAACCCCCCCCCCTTTTTTTTTTGGGGGGGGGGTTTTTTTTTTGGGGGGGGGGAAAAAAAAAACCCCCCCCCC"
  2.  
  3. list_of_seq=[backward[start:start+10] for start in range(0, len(backward), 10)]
  4. print list_of_seq
  5.  
  6. for start in [10, -20, 30, -30, 70]:
  7.     print list_of_seq[start/10] 
# 回答2


fields = line.split('\ t')
由于newline = \ n,这可能会给您带来额外的字段,或者将newline保留在最后一个字段中,这也可能引起问题。而是首先剥离空格:
fields = line.strip()。split()
请注意,split()接收条纹()的返回,默认值将在空格(任何空格,选项卡或新线组合)上拆分。

标签: python

添加新评论