python,通过坐标从DAS获取序列

python,通过坐标从DAS获取序列,python,xml,parsing,sequence,Python,Xml,Parsing,Sequence,,通过坐标获得DNA序列 网址: 示例文件: <DASDNA> <SEQUENCE id="chr20" start="30037832" stop="30038060" version="1.00"> <DNA length="229"> gtggcacccaaagatgctggaatctttatggcaaatgccgttacagatgc tccaagaaggaaagagtctatgtttactgcataaat

,通过坐标获得DNA序列

网址:

示例文件:

<DASDNA>
  <SEQUENCE id="chr20" start="30037832" stop="30038060" version="1.00">
  <DNA length="229">
    gtggcacccaaagatgctggaatctttatggcaaatgccgttacagatgc            
    tccaagaaggaaagagtctatgtttactgcataaataataaaatgtgctg     
    cgtgaagcccaagtaccagccaaaagaaaggtggtggccattttaactgc 
    tttgaagcctgaagccatgaaaatgcagatgaagctcccagtggattccc 
    acactctatcaataaacacctctggctga
  </DNA>
  </SEQUENCE>
</DASDNA>
我想从数千个这样的URL中获取序列部分,我应该怎么做? 我试着将数据写入文件并解析文件,它工作正常,但是有没有办法直接解析类似xml的字符串?我尝试了其他帖子的一些例子,但都不起作用

在这里,我添加了我的解决方案。感谢下面的两个答案。

解决方案1:

def getSequence2(chromosome, start, end):
    base = 'http://genome.ucsc.edu/cgi-bin/das/hg19/dna?segment='
    url = base + chromosome + ':' + str(start) + ',' + str(end)
    doc = etree.parse(url,parser=etree.XMLParser())
    if doc != '':
        sequence = doc.xpath('SEQUENCE/DNA/text()')[0].replace('\n','')
    else:
        sequence = 'THE SEQUENCE DOES NOT EXIST FOR GIVEN COORDINATES'
    return sequence
def getSequence1(chromosome, start, end):
    base = 'http://genome.ucsc.edu/cgi-bin/das/hg19/dna?segment='
    url = base + chromosome + ':' + str(start) + ',' + str(end)
    xml = urllib2.urlopen(url).read()
    if xml != '':
        w = open('temp.xml', 'w')
        w.write(xml)
        w.close()
        dom = parse('temp.xml')
        data = dom.getElementsByTagName('DNA')
        sequence = data[0].firstChild.nodeValue.replace('\n','')
    else: 
        sequence = 'THE SEQUENCE DOES NOT EXIST FOR GIVEN COORDINATES'
    return sequence
解决方案2:

def getSequence2(chromosome, start, end):
    base = 'http://genome.ucsc.edu/cgi-bin/das/hg19/dna?segment='
    url = base + chromosome + ':' + str(start) + ',' + str(end)
    doc = etree.parse(url,parser=etree.XMLParser())
    if doc != '':
        sequence = doc.xpath('SEQUENCE/DNA/text()')[0].replace('\n','')
    else:
        sequence = 'THE SEQUENCE DOES NOT EXIST FOR GIVEN COORDINATES'
    return sequence
def getSequence1(chromosome, start, end):
    base = 'http://genome.ucsc.edu/cgi-bin/das/hg19/dna?segment='
    url = base + chromosome + ':' + str(start) + ',' + str(end)
    xml = urllib2.urlopen(url).read()
    if xml != '':
        w = open('temp.xml', 'w')
        w.write(xml)
        w.close()
        dom = parse('temp.xml')
        data = dom.getElementsByTagName('DNA')
        sequence = data[0].firstChild.nodeValue.replace('\n','')
    else: 
        sequence = 'THE SEQUENCE DOES NOT EXIST FOR GIVEN COORDINATES'
    return sequence

当然,他们需要导入一些必要的库

使用Python XML解析库,例如,使用该解析器加载XML文件,然后使用选择器(例如使用XPath)获取所需的节点/元素。

谢谢您的回答,我得到了想要的。
>>> from lxml import etree
>>> doc = etree.parse("http://genome.ucsc.edu/cgi-bin/das/hg19/dna?segment=chr20:30037432,30038060",parser=etree.XMLParser())
>>> doc.xpath('SEQUENCE/DNA/text()')
['\natagtggcacatgtctgttgtcctagctcctcggggaaactcaggtggga\ngagtcccttgaactgggaggaggaggtttgcagtgagccagaatcattcc\nactgtactccagcctaggtgacagagcaagactcatctcaaaaaaaaaaa\naaaaaaaaaaaaaagacaatccgcacacataaaggctttattcagctgat\ngtaccaaggtcactctctcagtcaaaggtgggaagcaaaaaaacagagta\naaggaaaaacagtgatagatgaaaagagtcaaaggcaagggaaacaaggg\naccttctatctcatctgtttccattcttttacagacctttcaaatccgga\ngcctacttgttaggactgatactgtctcccttctttctgctttgtgtcag\ngtggcacccaaagatgctggaatctttatggcaaatgccgttacagatgc\ntccaagaaggaaagagtctatgtttactgcataaataataaaatgtgctg\ncgtgaagcccaagtaccagccaaaagaaaggtggtggccattttaactgc\ntttgaagcctgaagccatgaaaatgcagatgaagctcccagtggattccc\nacactctatcaataaacacctctggctga\n']