首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在字符串列表中,在字符串中找到一个短语,并将字符串中的两个整数(x.y)附加到一个列表中。Python

在字符串列表中,在字符串中找到一个短语,并将字符串中的两个整数(x.y)附加到一个列表中。Python
EN

Stack Overflow用户
提问于 2012-09-23 21:54:11
回答 1查看 144关注 0票数 0

因此,我试图编写一个脚本,一旦找到某个单词,就会读取一个文件并提取2个值。在这种情况下,当遇到字符串'exon‘时,它将保存它后面的两个整数。

我从创建空字符串开始:

代码语言:javascript
运行
复制
exon_start = []
exon_end = []

下面是我使用的简化数据的一个示例:

代码语言:javascript
运行
复制
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()函数导入正则表达式模块:

代码语言:javascript
运行
复制
indx_exon = range(0,len(data))

# so this relates each line of the data to a specific number in the index

我在识别每个单独行中的“exon”短语时遇到了困难,首先,我试图识别文本的哪一行具有外显子序列,以查看re.findall()是否有效,并指出:

代码语言:javascript
运行
复制
for p,line in zip(indx_line,data):

    if re.findall(r'exon',line) is True:
        print p

我什么都没有

当我说:

代码语言:javascript
运行
复制
for p,line in zip(indx_line,data):

    exon_test = re.findall(r'exon',line)
    print exon_test

我得到了一堆不包含“外显子”的线条,而对于“外显子”,它们给了我“外显子”。因此,我知道我可以使用re.findall()特性来查找每个字符串中的每一个外显子

--我只需要弄清楚,当它找到'exon‘时,我会怎么说,它需要在这一行中查找,直到它找到’.‘然后将其旁边的整数附加到相应的列表;即

代码语言:javascript
运行
复制
exon_start = [1,518]
exon_end = [35,2106]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-23 22:12:31

问题在if re.findall(r'exon',line) is True:行中。因为re.finall()不会返回TrueFalse。示例:

代码语言:javascript
运行
复制
>>> 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

将原始代码更改为:

代码语言:javascript
运行
复制
for p,line in zip(indx_line,data):

    if re.findall(r'exon',line):
        print p

应该让它发挥作用。

编辑:正如@TimPietzcker所指出的,在这种情况下根本不需要使用re。为了解决您的第二个问题,即获得..旁边的号码,下面的代码可能会有所帮助:

代码语言:javascript
运行
复制
>>> line = ' exon            1..35'
>>> if 'exon' in line:
...     ranges = line.split()[1].split('..')
...     print ranges
...
['1', '35']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12556584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档