所以我在服务器上有一个文件:
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'
希望更清楚...