繁体   English   中英

在字符串列表中,找到字符串中的短语,并将字符串中的两个整数(x..y)追加到list。 蟒蛇

[英]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()不会返回TrueFalse 例:

>>> 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM