1

所以我在服务器上有一个文件:

COADREAD ATF7 Missense_Mutation NGXA-AZ-3984 P17544 A436T

COADREAD ATG10 Missense_Mutation NGXA-AB-A010 Q9H0Y0 H133N

我的目标是找到 id (P17544),它在文件的第 5 列中并捕获/存储(我需要稍后打印该数字)它后面的令牌数是 436(这个数字应该介于两者之间来自第 6 列 A436T 的两个字母)。我可以这样做吗?我以前用 lxml 工作了一点,但仍然不确定如何做到这一点。提前致谢

这是我所拥有的

文件=打开('text.txt','r')

查找={}

对于文件中的行:

myid, token = file.rsplit(' ', 2)[1:]

token = token[1:-1] 
4

2 回答 2

2

使用内置str方法的最简单方法:

d = 'COADREAD ATF7 Missense_Mutation NGXA-AZ-3984 P17544 A436T'
myid, token = d.rsplit(' ', 2)[1:] # will except if can't be unpacked so you know you've got exactly 2 elements...
token = token[1:-1]

如果你想指定两个字母之间的数字,你可以使用正则表达式......re.match('[A-Z](\d{3})[A-Z]', token[1]) # or similar...

澄清:

d.rsplit(' ', 2)' '- 从返回的末尾开始在 s 处拆分字符串['COADREAD ATF7 Missense_Mutation NGXA-AZ-3984', 'P17544', 'A436T'] 。假设我们只寻找最后两个元素,我们用切片删除第一个元素,所以我们得到d.rsplit(' ', 2)[1:]which given ['P17544', 'A436T']

使用解包,我们命名我们的变量,并通过使用保证它的长度为 2 myid, token = d.rsplit(' ', 2)[1:]- 如果它没有恰好两个元素,则赋值将失败。

现在这myid应该是您希望使用切片从令牌中删除第一个和最后一个字符的 id,即token = token[1:-1].

然后:

print myid, token
# P17544 436

关于查找的评论:

在解析文件行后查找:

lookup = {}
for line in file:
    # do steps above so you have myid, token
    lookup[myid] = token

然后lookup['P17544'] 将返回'436'

希望这更清楚...

于 2012-07-11T20:51:47.073 回答
0

听起来很容易...沿空格拆分-然后提取第五个字段...以及第六个字段中的所有数字。还是我错过了什么?

>>> tokens = "COADREAD ATF7 Missense_Mutation NGXA-AZ-3984 P17544 A436T".split()
>>> print tokens[4]
P17544
>>> print ''.join([c for c in tokens[5] if c.isdigit()])
436
于 2012-07-11T20:46:17.533 回答