[英]In a list of strings, find a phrase within the string and append two integers (x..y) in string to a list . Python
因此,我正在尝试编写一个脚本,该脚本读取文件并在找到某个单词后提取2个值。 在这种情况下,遇到字符串“ exon”时,它将保存紧随其后的两个整数。
我从创建空字符串开始:
exon_start = []
exon_end = []
这是我正在使用的简化数据的示例:
for line in data:
print data
>>>
exon 1..35
/gene="CDKN1A"
CDS 73..567
/translation="MSEPAGDVRQNPCGSKACRRLFGPVDSEQLSRDCDALMAGCIQE
ARERWNFDFVTETPLEGDFAWERVRGLGLPKLYLPTGPRRGRDELGGGRRPGTSPALL
QGTAEEDHVDLSLSCTLVPRSGEQAEGSPGGPGDSQGRKRRQTSMTDFYHSKRRLIFS
KRKP"
misc_feature 76..78
/gene="CDKN1A"
exon 518..2106
/gene="CDKN1A"
我尝试为re.findall()函数导入正则表达式模块:
indx_exon = range(0,len(data))
# so this relates each line of the data to a specific number in the index
我在识别每一行中的“外显子”短语时遇到了麻烦,我只是试图确定文本的哪一行具有外显子序列,以查看re.findall()是否正常工作,所以我提出:
for p,line in zip(indx_line,data):
if re.findall(r'exon',line) is True:
print p
我一无所有
当我把:
for p,line in zip(indx_line,data):
exon_test = re.findall(r'exon',line)
print exon_test
对于不包含“ exon”的行和包含“ exon”的行,我得到了一堆[],他们给了我“ exon”。 所以我知道我可以使用re.findall()功能来查找每个字符串中每次出现的“ exon”
我只需要确切地知道当它找到“ exon”时我要怎么说,它需要在那一行中查找直到找到“ ..”,然后将其侧面的整数附加到相应的列表中 ; 即
exon_start = [1,518]
exon_end = [35,2106]
问题在于if re.findall(r'exon',line) is True:
行。 因为re.finall()
不会返回True
或False
。 例:
>>> mystr = '123 exon'
>>> import re
>>> re.findall(r'exon', mystr)
['exon']
>>> re.findall(r'exon', mystr) is True
False
>>> bool(re.findall(r'exon',mystr))
True
>>> if re.findall(r'exon', mystr):
... print 'true'
...
true
将原始代码更改为:
for p,line in zip(indx_line,data):
if re.findall(r'exon',line):
print p
应该使它工作。
编辑:正如@TimPietzcker指出的,在这种情况下,您根本不需要使用re
。 并解决你获得数侧翼的第二个问题..
,这里是代码,可能会有所帮助:
>>> line = ' exon 1..35'
>>> if 'exon' in line:
... ranges = line.split()[1].split('..')
... print ranges
...
['1', '35']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.