Я не знаю, хотите ли вы, чтобы вывод был в определенном формате. Тем не менее, вы можете попробовать следующий код. Вывод представляет собой словарь, где ключи - это PMID, а значения - список авторов.
import xml.etree.ElementTree as ET
import pandas as pd
tree = ET.parse('E:\Python\DataFiles\PMID.xml') # change according to your location
authors_pmid = []
all_authors_pmid = []
root = tree.getroot()
for amedlinecitation in root.iter('MedlineCitation'): #PMID and Author are childs of MedlineCitation
pmid = amedlinecitation.find('PMID').text
for anauthor in amedlinecitation.iter('Author'): # for each amedlinecitation, find all its Authors
author_name = anauthor.find('LastName').text # for each Author, find the LastName tag and extract its value
authors_pmid = [pmid,author_name]
all_authors_pmid.append(authors_pmid)
df = pd.DataFrame(all_authors_pmid,columns=['PMID','Author'])
print(df)
Выход:
{'2844048': ['Guarner', 'Cohen', 'Mushi'], '123456': ['Smith', 'Jones']}
Следующий код даст вывод в табличной форме с использованием Python Dataframe.
import xml.etree.ElementTree as ET
import pandas as pd
tree = ET.parse('E:\Python\DataFiles\PMID.xml') # change according to your location
authors_pmid = []
all_authors_pmid = []
root = tree.getroot()
for amedlinecitation in root.iter('MedlineCitation'): #PMID and Author are childs of MedlineCitation
pmid = amedlinecitation.find('PMID').text
for anauthor in amedlinecitation.iter('Author'): # for each amedlinecitation, find all its Authors
author_name = anauthor.find('LastName').text # for each Author, find the LastName tag and extract its value
authors_pmid = [pmid,author_name]
all_authors_pmid.append(authors_pmid)
df = pd.DataFrame(all_authors_pmid,columns=['PMID','Author'])
print(df)
Выход:
PMID Author
0 2844048 Guarner
1 2844048 Cohen
2 2844048 Mushi
3 123456 Smith
4 123456 Jones
Чем вышеуказанный код отличается от первого кода:
- Для каждой пары PMID и имени автора будет создан список. Этот список назван author_pmid. Например, ['2844048', 'Guarner'], ['2844048', 'Cohen'], ['2844048', 'Mushi'], ['123456', 'Smith'], ['123456', 'Jones '] будут значения в списке переменных author_pmid во время каждой итерации внутреннего цикла for.
- Затем каждый из вышеперечисленных списков будет добавлен в окончательный список, определенный all_authors_pmid
- Этот окончательный список будет вводом данных для вызова конструктора Dataframe для создания Dataframe с именами столбцов: PMID и Author