Извлечение списка или словаря из файла xml - PullRequest
1 голос
/ 29 апреля 2020

Здравствуйте, я никогда не работал с xml .. Может кто-нибудь помочь мне с созданием списка или словаря в python, который дает идентификатору конкретное c имя (строку) из файла xml.

Вот мой xml файл:

api.brain-map.org / api / v2 / data / query. xml? Num_rows = 10000 & start_row = 10001 && критерии = модель :: Gene, rma: : критерии, продукты [аббревиатура $ eq% 27Mouse% 27]

Я могу показать вам фрагмент:

<Response success="true" start_row="10001" num_rows="9990" total_rows="19991">
<objects>
<object>
<acronym>Hdac4</acronym>
<alias-tags>4932408F19Rik AI047285</alias-tags>
<chromosome-id>34</chromosome-id>
<ensembl-id nil="true"/>
<entrez-id>208727</entrez-id>
<genomic-reference-update-id>491928275</genomic-reference-update-id>
<homologene-id>55946</homologene-id>
<id>84010</id>
<legacy-ensembl-gene-id nil="true"/>
<name>histone deacetylase 4</name>
<organism-id>2</organism-id>
<original-name>histone deacetylase 4</original-name>
<original-symbol>Hdac4</original-symbol>
<reference-genome-id nil="true"/>
<sphinx-id>188143</sphinx-id>
<version-status>no change</version-status>
</object>
<object>
<acronym>Prss54</acronym>
<alias-tags>4931432M23Rik Klkbl4</alias-tags>
<chromosome-id>53</chromosome-id>
<ensembl-id nil="true"/>
<entrez-id>70993</entrez-id>
<genomic-reference-update-id>491928275</genomic-reference-update-id>
<homologene-id>19278</homologene-id>
<id>46834</id>
<legacy-ensembl-gene-id nil="true"/>
<name>protease, serine 54</name>
<organism-id>2</organism-id>
<original-name>protease, serine, 54</original-name>
<original-symbol>Prss54</original-symbol>
<reference-genome-id nil="true"/>
<sphinx-id>65991</sphinx-id>
<version-status>updated</version-status>
</object>
<object>
...

Итак, в конце я хочу получить словарь или список, который говорит: 208727 - это Hdac4, и это для всех в моих файлах размером 2 xml.

Так что мне нужен идентификатор entrez и оригинальный символ. файлы:

http://api.brain-map.org/api/v2/data/query.xml?num_rows=10000&start_row=1&&criteria=model :: Gene, rma :: критерии, продукты [сокращение $ eq% 27Mouse% 27]

и

http://api.brain-map.org/api/v2/data/query.xml?num_rows=10000&start_row=10001&&criteria=model :: Gene, rma :: критерии, продукты [аббревиатура $ eq% 27Mouse% 27]

Может кто-нибудь помочь мне с этим? Я не уверен, в каком формате мне следует его хранить. В конце я хочу найти идентификатор и получить оригинальное имя.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

Я вижу один вопрос о чем-то близком к XML, и вы можете попробовать использовать их.

Используя lib python l xml, с документами в ссылка

Вы можете начать с:

import requests
from lxml import etree, html
# edit: Yes, BeautfulSoup works too, like your friend say before
from bs4 import BeautifulSoup

url = "http://api.brain-map.org/api/v2/data/query.xml?num_rows=10000&start_row=10001&&criteria=model::Gene,rma::criteria,products[abbreviation$eq%27Mouse%27]"
req = requests.get(url)
doc = req.text

root = etree.XML(doc) # Works with this or ...
soup = BeautifulSoup(doc) # works with this

их нужно прочитать в документации, чтобы узнать, как перемещаться по тегам

1 голос
/ 29 апреля 2020

Если у вас есть XML, сохраненный в файле с именем results.xml

, тогда использовать BeautifulSoup так же просто, как

from bs4 import BeautifulSoup

with open('results.xml') as f:
    soup = BeautifulSoup(f.read(), 'xml')

    final_dictionary = {}

    for object in soup.find_all('object'):
        final_dictionary[object.find('acronym').string] = object.find('entrez-id').string

    print(final_dictionary)                        

Если вместо этого вы хотите получить XML из URL, то это также просто

import requests
from bs4 import BeautifulSoup

url = "<your_url>"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'xml')

# Once you have the 'soup' variable assigned
# It's the same code as above example from here on

Вывод

{'Hdac4': '208727', 'Prss54': '70993'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...