Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python上读取令牌_Python_Token - Fatal编程技术网

在python上读取令牌

在python上读取令牌,python,token,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=

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

<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>
打印(stt)


打印端

似乎您可以使用
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')

看起来你可以用
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')

这看起来很像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

这看起来很像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


您尝试过什么?看起来像XML,您尝试过使用lxml编写解析器吗?您尝试过什么?看起来像XML,您尝试过使用lxml编写解析器吗?非常感谢TankorSmash。我有很多类似的数据。如果它找到dbname=GE3D并从ln stt=“114”和142 from end=“142”在dbname=GE3D的一个上捕获114和142,是否可能。当然,您只需要使用
soup.findAll()
。看看这里的文档
http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#The 基本查找方法:findAll(name、attrs、recursive、text、limit、**kwargs)
在掌握了itI的窍门后,它非常简单。我尝试使用您的方法,但在添加stt_值时,它说索引超出了范围。。。和end_值。确保传递给
findAll
的字符串是
ln
而不是
中的
。请尝试打印
findAll
的结果,例如:
print soup.findAll('ln')
,以确保正在解析的列表不是空的。非常感谢TankorSmash。我有很多类似的数据。如果它找到dbname=GE3D并从ln stt=“114”和142 from end=“142”在dbname=GE3D的一个上捕获114和142,是否可能。当然,您只需要使用
soup.findAll()
。看看这里的文档
http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#The 基本查找方法:findAll(name、attrs、recursive、text、limit、**kwargs)
在掌握了itI的窍门后,它非常简单。我尝试使用您的方法,但在添加stt_值时,它说索引超出了范围。。。和end_值。确保传递给
findAll
的字符串是
ln
而不是
中的
。请尝试打印
findAll
的结果,就像这样:
print soup.findAll('ln')
以确保您正在解析的列表不是空的。非常感谢您的网站。这是否允许我从文本中dbname=GE3D的部分获取stt和结束号?我问这个问题的原因是,我在一个文件中有多个类似的文本,有dbname='GE3D'和没有dbname='GE3D'…谢谢again@ChadD:只要“文本”是(大部分)有效的XML,就可以。循环将迭代每个
match
标记,该标记的
dbname
GE3D
。我尝试了它,看看它是否打印数字列表,但它只打印一个数字作为开始,一个数字作为结束。(我只是在代码下面添加了print stt和print end。)thanks@ChadD:嗯,是的,我看到你把打印语句放在循环之外了。我已经编辑了答案。如果您希望列表中的值,您可以这样做,而不是打印。非常感谢您的网站。这是否允许我从文本中dbname=GE3D的部分获取stt和结束号?我问这个问题的原因是,我在一个文件中有多个类似的文本,有dbname='GE3D'和没有dbname='GE3D'…谢谢again@ChadD:只要“文本”是(大部分)有效的XML,就可以。循环将迭代每个
match
标记,该标记的
dbname
GE3D
。我尝试了它,看看它是否打印数字列表,但它只打印一个数字作为开始,一个数字作为结束。(我只是在代码下面添加了print stt和print end。)thanks@ChadD:嗯,是的,我看到你把打印语句放在循环之外了。我已经编辑了答案。如果您想要列表中的值,可以这样做而不是打印。