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

COADREAD ATF7 Missense_Mutation NGXA-AZ-3984 P17544 A436T

COADREAD ATG10 Missense_Mutation NGXA-AB-A010 Q9H0Y0 H133N

我的目标是找到id(P17544),在文件和捕获/存储的第5列中(我以后需要打印该数字)在它后面的令牌的数量为436(该数字假定介于两者之间)第2列中的A436T)。
有什么办法可以做到这一点?之前我曾与lxml一起工作过一点,但仍不确定如何执行此操作。提前致谢

这是我所拥有的

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

lookup = {}

对于文件中的行:

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

token = token[1:-1]

最佳答案

使用内置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)-从返回' '的末尾开始在['COADREAD ATF7 Missense_Mutation NGXA-AZ-3984', 'P17544', 'A436T'] s处拆分字符串。假设我们只在寻找最后2个元素,我们用切片将第一个元素删除,因此得到d.rsplit(' ', 2)[1:],它给出了['P17544', 'A436T']

使用拆包,我们为变量命名,并通过使用myid, token = d.rsplit(' ', 2)[1:]来确保其长度为2-如果它不完全具有两个元素,则分配将失败。

现在,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'

希望更清楚...

10-05 20:30
查看更多