在python上读取令牌

时间:2012-07-06 15:43:38

标签: python token

我想从文本文档中读取令牌并检查特定关键字。我该怎么办? 例如,我的文件如下所示:

<protein id="Q11" name="HUMAN" length="655" crc64="30E1C1D138">
    <match id="G3DSA:3.30.160.60" name="ZC2f_H2/iegse_NA-bd" dbname="GE3D" status="T" evd="HMPfm">
      <ipr id="IPR013087" name="Zinc finger, H2-type/inrase, D-bindg" tpe="Dain" />
      <ln stt="114" end="142" sc="1.0E-8" />
    </match>

(我想跳过第一行,在dbname的第二行搜索令牌必须等于GE3D。如果是,我想存储stt号和结束号。)

*所以我做了这个,但我不知道为什么它只返回一个数字作为开始和结束,因为不止一个数字应该满足要求: 来自lxml import entree

filename ='inQ14591.txt'

open(filename,'rb')为f:

root = etree.parse(f)
for ln in root.xpath("/protein/match[@dbname='GE3D']/ln"):
    start = ln.get("stt")
    end = ln.get("end")

print(stt)

打印结束

2 个答案:

答案 0 :(得分:1)

这看起来很像XML,你可以利用它。

from lxml import etree

filename = "somefilename" # change this

with open(filename, 'rb') as f:
    root = etree.parse(f)
    for ln in root.xpath("/protein/match[@dbname='GE3D']/ln"):
        stt = ln.get("stt")
        end = ln.get("end")
        print "%s, %s" % (stt, end, )
        # do something else with stt and end

答案 1 :(得分:0)

好像你可以用BeautifulSoup解析它,但我不确定你到底想要什么

from BeautifulSoup import BeautifulSoup
text = '''<protein id="Q11" name="HUMAN" length="655" crc64="30E1C1D138">
    <match id="G3DSA:3.30.160.60" name="ZC2f_H2/iegse_NA-bd" dbname="GE3D" status="T" evd="HMPfm">
      <ipr id="IPR013087" name="Zinc finger, H2-type/inrase, D-bindg" tpe="Dain" />
      <ln stt="114" end="142" sc="1.0E-8" />
    </match>'''

soup= BeautifulSoup(text)

res=soup.findAll(dbname='GE3D')

根据您的评论更新以查找stt值,您需要找到包含ln的行,然后使用stt标记,如下所示:

stt_value = soup.findAll('ln')[0]['stt'] # u'114'
end_value = soup.findAll('ln')[0]['end'] # u'142'